这是一个简单的设计模式问题:
作为我当前项目的一部分,我编写了一个接口来执行数据库搜索(使用 web 服务和相关的客户端存根)并返回结果 - 随后 struts 操作将使用该结果作为对 JSON 请求的响应。
界面是这样的:
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;
}
ETC...
因此,对于特定类型的对象,实现了上述 Action 类的具体版本(顺便说一下,它是 stuts 动作),并且它将引用上述“Provider”的实现......就像这样:
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
}
}
希望它使它更清楚。