Jakarta ee 会话外观和数据传输对象

Jakarta ee 会话外观和数据传输对象,jakarta-ee,ejb,dto,stateless-session-bean,facade,Jakarta Ee,Ejb,Dto,Stateless Session Bean,Facade,实体bean的多个细粒度调用增加了网络调用的开销,甚至是多个事务。换句话说,风险在于有一个具有高网络开销、高耦合、低可重用性和可维护性的解决方案。我们使用会话外观来封装业务层组件,并向远程客户端公开粗粒度服务我们使用数据传输对象来减少呼叫数量,这意味着您需要在每次呼叫中传输更多数据。 我不知道是什么让这两种模式如此不同。一种是DTO中的序列化,但其他的是什么?尽管它们一起工作得很好,但这些模式完全不同 您对会话facade的描述足够好: 我们使用会话外观来封装业务层组件,并向远程客户端公开粗粒度

实体bean的多个细粒度调用增加了网络调用的开销,甚至是多个事务。换句话说,风险在于有一个具有高网络开销、高耦合、低可重用性和可维护性的解决方案。我们使用会话外观来封装业务层组件,并向远程客户端公开粗粒度服务
我们使用数据传输对象来减少呼叫数量,这意味着您需要在每次呼叫中传输更多数据。

我不知道是什么让这两种模式如此不同。一种是DTO中的序列化,但其他的是什么?

尽管它们一起工作得很好,但这些模式完全不同

您对会话facade的描述足够好:

我们使用会话外观来封装业务层组件,并向远程客户端公开粗粒度服务

然而,关于DTO的那个并没有反映出模式动机,它可能是你怀疑的根源

DTO模式非常简单。如果您公开了一个粗粒度服务(遵循会话外观模式中表达的思想),那么它可能需要几个输入参数,并且可能会产生一个相对复杂的输出。为了处理此客户机服务数据传输,您可以创建一个表示服务所需参数的序列化对象(在本例中称为DTO)。同样的想法也适用于服务输出,所有这些信息都将封装在一个简单的java对象中

//表示服务的类
公共MyCarSegrainedServiceClass{
公共myservicecoutdto mycarsegrainedservice(MyServiceInDTO参数){
我的服务超出了范围;
//你的密码在这里
返回输出;
}
}
公共MyServiceInDTO{
//任何类型的不同参数的列表
私有int firstParam;
私有字符串secondParam;
.
.
.
//接球手和接球手
}
公共MyServiceOutDTO{
//此对象表示服务输出
私有整数FistOutValue;
...
//能手和二传手
}
请注意,您可能有一个不使用任何DTO的粗粒度服务,但DTO对象本身并没有实现粗粒度服务