在集群化的完整Java应用程序中,DTO模式仍然是有效的选择吗?有问题的应用程序使用EJB、Hibernate和Struts以及Spring等。在这种情况下,传输域对象有什么问题吗?
编辑:为了澄清我的问题,有了现代的资源和Java EE中的改进,有没有理由不只使用域对象?如果没有,那么DTO模式是不是有点淡出,不应该在新的应用程序中使用?
发布于 2012-06-28 06:02:11
未被弃用。是否应该使用DTO模式取决于应用程序体系结构。例如,当您开发Web服务(使用JAX-WS或JAX-RS)时,您应该通过web方法发送DTO,以便C#或Python客户端应用程序可以使用它,并且您的web方法不应该返回具有Hibernate注释的对象,请记住,与其他语言相比,在创建实体时不会使用这些注释或其他业务逻辑。
编辑(基于您的评论):这取决于软件架构。例如,我正在处理一个SOA项目,我们将DTO用于服务层和表示层。更深入地说,我们甚至使用DTO来处理服务内部的数据库通信,我们只使用SP来与DB通信,所以Hibernate或任何其他对象关系管理工具都不能在那里工作,我们可以使用Spring DAO,该框架也使用DTO。在当今的许多应用程序中,您可以找到大量的DTO模式。
更多对这个问题有帮助的信息:
编辑2:另一个信息来源,将解释使用DTO设计的主要原因,由Martin Fowler解释
结论:DTO不是反模式。DTO仅在您需要将数据从一个子系统传递到另一个子系统时使用,并且它们没有默认或标准的通信方式。
发布于 2012-06-28 06:58:58
这在Java中是一个非常有用的模式。
我使用DTO将相关的实体对象从EJB bean传输到UI层。实体对象是在一个事务(参见TransactionAttributeType.REQUIRED)中从DB 中获取的,并存储在DTO对象中。DTO在UI层中使用。
https://stackoverflow.com/questions/11237946
复制