实体Bean的多个细粒度调用会增加网络调用的开销,甚至是多个事务。换句话说,风险是具有高网络开销,高耦合,可重用性和可维护性差的解决方案。我们使用会话Facade来封装业务层组件,并向远程客户端公开粗粒度服务。
我们使用数据传输对象减少呼叫次数,这意味着您需要在每次呼叫时传输更多数据。
我想知道是什么让这两种模式如此不同。一个是DTO中的序列化,但其他人呢?
答案 0 :(得分:1)
虽然它们很好地协同工作,但这些模式完全不同。
您对会话外观的描述已经足够了:
然而,关于DTO的那个并没有反映出模式的动机,它可能是你怀疑的根源。我们使用会话Facade来封装业务层组件,并向远程客户端公开粗粒度服务。
DTO模式非常简单。如果您已经暴露了粗粒度服务(遵循会话外观模式中的想法),它可能需要几个输入参数,并且它可能会产生相对复杂的输出。为了处理此客户端服务数据传输,您可以创建一个序列化对象(在本例中称为DTO),它表示服务所需的参数。同样的想法适用于服务输出,所有这些信息都将封装在一个简单的java对象中。
//class that represents the service
public MyCoarseGrainedServiceClass{
public MyServiceOutDTO myCoarseGrainedService(MyServiceInDTO params) {
MyServiceOutDTO outout;
//your code goes here
return output;
}
}
public MyServiceInDTO {
//a list o different parameters of any type
private int firstParam;
private String secondParam;
.
.
.
//getters and setters
}
public MyServiceOutDTO {
//this object represents the service output
private int fistrOutputValue;
...
//getters ans setters
}
请注意,您可以使用不使用任何DTO的粗粒度服务,但DTO对象本身不会实现粗粒度服务。