当前位置: 首页 > 面试题库 >

DTO模式是否被弃用?

司空俊悟
2023-03-14
问题内容

在群集的完整Java EE应用程序中,DTO模式仍然是有效的选择吗?有问题的应用程序使用EJB
Hibernate和Struts以及Spring等。在这种情况下传输域对象有什么问题吗?

编辑:只是为了澄清我的问题,随着现代资源和Java
EE的改进,是否有理由不仅仅使用域对象?如果没有,那么DTO模式是否会逐渐消失并且不应该在新的应用程序中使用?


问题答案:

不被弃用。是否应使用DTO模式取决于应用程序体系结构。例如,当开发Web服务(使用JAX-WS或JAX-
RS)时,应通过Web方法发送DTO,以便C#或Python客户端应用程序可以使用它,并且Web方法不应返回具有以下类的对象:休眠注释,请记住,将不会使用其他注释或其他业务逻辑在内部创建实体。

编辑(根据您的评论):这取决于软件体系结构。例如,我正在一个SOA项目中,我们将DTO用于服务层和表示层。在更深入的内部,我们甚至使用DTO处理服务内部的数据库通信,我们仅使用SP与DB进行通信,因此没有Hibernate或任何其他ORM工具可以在那里工作,我们可以使用Spring
DAO,而该框架也使用DTO。如今,您可以在许多应用程序中找到许多DTO模式。

有关此问题的更多信息:

  • DTO,VO,POJO,JavaBeans之间的区别?(基本上,任何DTO都是POJO)。
  • 核心J2EE模式-传输对象

编辑2:另一信息源将解释使用DTO设计的主要原因,由马丁·福勒(Martin
Fowler)解释

  • 本地DTO

结论:DTO不是反模式。DTO仅在您需要将数据从一个子系统传递到另一个子系统并且它们没有默认或标准的通信方式时才使用。



 类似资料:
  • 问题内容: 看来log4j存在一些类加载问题(其中包括其他问题),在我看来,趋势是从log4j转向slf4j。(Hibernate停止使用第一个来支持后者) 是真的吗 slf4j解决的log4j主要问题是什么? slf4j是硬道理还是有更好的“下一个下一个log4j”行业标准? 更新: 因此,delfuego的这个答案使我感到困惑,您可以接受/反对吗?: 您似乎偶然发现了log4j(和Apache

  • 问题内容: 我在对此答案的评论中阅读了有关过时的计划(抱歉,没有参考)的其他许多问题。我真的希望不要,因为我将它用作Java中调度事情的简便方法(而且效果很好)。但是,如果过时了,我会去别处。 但是,快速浏览 1.6版 的API文档并没有说明它已被弃用。Sun的“ 不推荐使用的清单”中甚至都没有提到它。 是否正式弃用 *,如果是,我应该使用什么代替? 另一方面, 如果不弃用它,* 人们是否可以停止

  • 问题内容: 您已经意识到了一个古老的问题:包含浮动元素的容器不会自动扩展其高度以围封其子级。 解决此问题的一种方法是“clearfix”,它添加了许多CSS规则以确保容器正确延伸。 但是,仅提供容器似乎同样有效,并且具有相同的浏览器兼容性。 这是否意味着不建议使用“ clearfix”?使用它还有什么优势吗? 这里有一个非常相似的问题:clearfixhack和overflow:hidden与ov

  • 问题内容: 我目前正在为一个项目创建REST-API,并且一直在阅读有关最佳实践的文章。许多人似乎反对DTO,只是公开域模型,而其他人似乎认为DTO(或用户模型或任何你想称呼的东西)是不好的做法。我个人认为这篇文章很有道理。 但是,我还了解了DTO的所有额外映射代码,域模型可能与其DTO对应对象100%相同的缺点等。 我们主要创建API,以便其他客户端可以使用数据,但是,如果操作正确,我们也将尽可

  • 问题内容: 我目前正在为一个项目创建REST-API,并且一直在阅读有关最佳实践的文章。许多人似乎反对DTO,只是公开域模型,而其他人似乎认为DTO(或用户模型或任何您想称呼的东西)是不好的做法。我个人认为这篇文章很有道理。 但是,我还了解了DTO的所有额外映射代码,域模型可能与其DTO对应对象100%相同的缺点等。 我们主要创建API,以便其他客户端可以使用数据,但是,如果操作正确,我们也将尽可

  • 问题内容: 我刚刚看过有关Inside的讨论。 您可以看到该函数之后,该函数将被React调用。当您进行呼叫时,不仅使整个组件树都被重新渲染,不仅是当前组件- 别忘了,当前组件刚刚完成了渲染。 有些人建议把电话打进去。在某些情况下,我想获取渲染元素的高度并将其存储为状态,而上述方法将不起作用。我还浏览了React的官方网站,它建议在内部进行Ajax调用,这再次违背了上述想法。 那么,放进去我是否错