以下は、デザイン パターンに関する簡単な質問です。
現在のプロジェクトの一環として、(Web サービスと関連するクライアント スタブを使用して) データベース検索を実行し、結果を返すインターフェイスを作成しました。結果は、後で JSON 要求への応答として Struts アクションによって使用されます。
インターフェイスは次のようなものです。
public interface DynamicSearchProvider {
JSONObject getSearchResultsAsJSONObject(DatatablesRequestParams params)
throws JSONException;
}
次に、オブジェクトの特定のタイプごとに、上記の具体的なバージョンが実装され、関連する Web サービスを呼び出して結果を返します。
基本的に、私が知る限り、これは一連のビジネス ロジックの単なるラッパーです。
問題は、これを何と呼ぶかということです。プロバイダーという用語はかなりあいまいなので好きではありません。これに対して明確に定義された設計パターンはありますか?
理想的には、これでSpringを使用することを好みましたが、残念ながら、このプロジェクトはレガシーコードベースの一部であるため、このプロジェクトでは使用できません...
編集:
使用される場所は次のとおりです。
public abstract class GenericDynamicSearchAction extends GenericAction {
private static Log log = LogFactory.getLog(GenericDynamicSearchAction.class);
/**
* Method to be implemented by each individual search action
*/
public abstract DynamicSearchProvider getDynamicSearchProvider();
public final ActionForward executeAuthenticated(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException {
log.debug("called");
DatatablesRequestParams datatablesRequestParams = DatatablesUtils.extractDatatablesParamsFromRequest(request);
try {
JSONObject jsonResponse = getDynamicSearchProvider().getSearchResultsAsJSONObject(datatablesRequestParams);
String echo = datatablesRequestParams.getEcho();
jsonResponse.put(DatatablesUtils.ECHO_FIELD_NAME, echo);
response.setContentType("application/json");
String jsonResponseString = jsonResponse.toString();
log.debug("Returning JSON response:"+jsonResponseString);
response.getWriter().print(jsonResponseString);
} catch (JSONException e) {
response.setContentType("text/html");
response.getWriter().print(e.getMessage());
}
return null;
}
等...
したがって、特定のタイプのオブジェクトに対して、上記の Action クラスの具体的なバージョン (ちなみにこれは stuts アクションです) が実装され、上記の「プロバイダー」の実装への参照が含まれます...次のようになります。
public class PolicyDynamicSearchAction extends GenericDynamicSearchAction {
@Override
public final DynamicSearchProvider getDynamicSearchProvider() {
return new PolicyDynamicSearchProvider();
}
}
と
public class PolicyDynamicSearchProvider implements DynamicSearchProvider {
public final JSONObject getSearchResultsAsJSONObject(DatatablesRequestParams params) throws JSONException {
//some business logic that goes to webservice etc to get the info
}
}
それがより明確になることを願っています。