在一个完整的集群 Java EE 应用程序中,DTO 模式是否仍然是一个有效的选项?有问题的应用程序使用 EJBs Hibernate 和 Struts with Spring 等。在这种情况下传输域对象有什么问题吗?
编辑:只是为了澄清我的问题,随着现代资源和 Java EE 的改进,是否有理由不只使用域对象?如果没有,那么 DTO 模式是否会逐渐淡出并且不应在新应用程序中使用?
最佳答案
未弃用。是否应该使用 DTO 模式取决于应用程序架构。例如,当您开发 Web 服务(使用 JAX-WS 或 JAX-RS)时,您应该通过 Web 方法发送 DTO,以便 C# 或 Python 客户端应用程序可以使用它,并且您的 Web 方法不应返回类具有的对象Hibernate 注释,请记住,与使用其他语言相比,实体不会使用这些注释或内部的其他业务逻辑创建。
编辑(根据您的评论):这取决于软件架构。例如,我正在从事一个 SOA 项目,我们将 DTO 用于服务层和表示层。在更深的内部,我们甚至使用 DTO 来处理服务内部的数据库通信,我们只使用 SP 与 DB 通信,因此 Hibernate 或任何其他 ORM 工具都不能在那里工作,我们可以使用 Spring DAO该框架也使用 DTO。现在,您可以在许多应用程序中找到很多 DTO 模式。
有关此问题的更多信息:
- Difference between DTO, VO, POJO, JavaBeans? (基本上,任何 DTO 都是 POJO)。
- Core J2EE Patterns - Transfer Object
编辑 2:另一个信息来源将解释使用 DTO 设计的主要原因,由 Martin Fowler 解释。
结论:DTO 不是反模式。只有当您需要将数据从一个子系统传递到另一个子系统并且它们没有默认或标准的通信方式时,才应使用 DTO。
关于java - 是否弃用了 DTO 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11237946/