假设我在SOA模型应用程序中有两个类..
问题是,如果SvcBusiness类使用请求作为其类变量,还是应该只使用其中一个业务方法中的请求?可能需要将请求传递给DAO层等其他较低层。这些类是否也将请求用作类变量,或者请求是否只是方法的一部分?
ServiceImpl类:
public class ServiceImpl {
public Response getDataForType1Request(Request type1) {
SvcBusiness buzclazz = new SvcBusiness();
return buzclazz.doOperationForType1(type1);
}
public Response getDataForType2Request(Request type2) {
SvcBusiness buzclazz = new SvcBusiness();
return buzclazz.doOperationForType2(type2);
}
}
选项1:当请求作为参数传递时。
public class SvcBusiness {
public Response doOperationForType1(Request type1) {
// do business and return response1
}
public Response doOperationForType2(Request type2) {
// do business and return response2
}
}
选项2:将请求设置为类变量。在这种情况下... ServiceImpl将在创建对象时将请求传递给SvcBusiness构造函数..并且只需调用execute()方法。
public class SvcBusiness {
private Request request;
public SvcBusiness(Request request) {
this.request = request;
}
private Response doOperationForType1() {
// do business and return response1
}
private Response doOperationForType2() {
// do business and return response2
}
public Response execute() {
// if type1 request call doOperationForType1()
// if type2 request call doOperationForType1()
}
}
请帮忙!两者的优点和缺点是什么?是否有设计模式来解决这种情况?
答案 0 :(得分:2)
不要在类层次结构中进一步使用请求(和响应)!服务(以及服务调用的所有内容)可以从其他地方调用,其中不存在请求。然后你会遇到填充该参数的问题。在服务中使用自己的数据模型,并从请求中提取和转换所需的所有内容。
答案 1 :(得分:0)
完全同意Uwe的回答。但是,如果您仍然想要使用Request类,那么它作为参数(Servlets的工作方式)的危害就会小一些。否则,您必须在极有可能的多线程环境中处理同步。
答案 2 :(得分:0)
当我遇到这样的问题时,我总是想知道我是否真的需要一个物体。通常我使用选项1,但创建所有方法static
。由于这些方法不依赖于当前对象状态(没有实例属性),因此我保存了一些内存而不是创建这样的对象(其他选项只是实现了Singleton模式)。
public class SvcBusiness {
public static Response doOperationForType1(Request type1) {
// do business and return response1
}
public Response doOperationForType2(Request type2) {
// do business and return response2
}
}