在ejb3中使用数据传输对象被认为是最佳实践

El *_*Moz 12 design-patterns hibernate java-ee ejb-3.0

虽然单个设计显然不能涵盖所有场景,但现在普遍认为ORM类应该在表示层和业务层(本地或远程)之间来回传递,从而取代了对数据传输对象的需求?据我所知,使用ORM类会出现不必要的急切加载,上下文管理问题和紧密耦合等问题,但也会节省大量时间并保持简单.现在是否有一种标准方法通常有利于一种方法(在大多数情况下)?

JAR*_*ARC 4

这是一个非常有趣的问题,也是我在过去两年里一直在研究和实验的问题。

我认为这里确实没有正确或错误的答案。我认为你不能简单地说我想要一个而不是另一个,因为通常你可能想要一个混合体,具体取决于你的客户是什么(网页、ws、机器和/或本地、远程)。

这里要记住的重要一点是每种产品的优缺点是什么,并根据您的要求应用它。

例如:

  • 如果您使用 SEAM,那么您会希望避免多层架构,因为您可以访问扩展的持久性上下文。其他没有这种支持的 Web 技术往往与预先准备状态的 DTO 配合得更好。
  • 如果您要发送远程消息,重要的是保持消息的轻量级,DTO 通常比丰富的域对象工作得更好。在这里您可以透明地抑制任何 ORM 问题/行为。
  • DTO 模式的优点是可以保护您的客户端免受域更改的影响。如果您的应用程序是一个 Web 服务,这一点尤其重要,拥有一个定义您的合约的域(实体)对象可能会让您在某些时候陷入困境。

通过分层包装您的系统并仔细公开和保护它们,您可以为许多不同类型的客户端生成各种 API。