Hibernate DTO和值对象映射

时间:2012-07-04 17:31:48

标签: hibernate

将hibernate实体带到表示层是不错的做法?或者我们是否需要将实体的所有属性映射到值对象,而值对象将用于UI?

请让我知道这两个方面的优点和缺点。

我们什么时候应该使用什么?

2 个答案:

答案 0 :(得分:13)

你所谓的DTO是ORM中的实体。它们通常是包含业务逻辑的域模型的一部分,并且大部分时间包含的数据多于呈现单个视图所需的数据。我个人的经验法则

当DAL与视图之间没有传输层时,在视图中使用实体,并且几乎没有业务逻辑:

  • 优点:
    • 一个模特
    • 无需在模型之间进行映射
    • 更容易使用延迟加载
  • 缺点:
    • 模型中的每次更改都意味着更改视图
    • 许多带转移层的不满情绪见下文

当存在传输层和/或视图数据与实体不同或聚合许多不同实体时,将实体映射到DTO

  • 优点:
    • 当模型发生变化时,DTO / views不必更改
    • 避免通过有大量问题的线路发送实体(延迟加载异常,发送许多不需要的数据,暴露敏感信息......)。
    • 模型具有较少的职责(序列化),使其更易于重用(例如,后端处理)
  • 缺点:
    • 更多要编写的课程
    • 将实体翻译为DTO的代码

答案 1 :(得分:0)

如果您将实体暴露在不同的层和模块中,您还可以获得更多的性能和RAM使用效率。这完全取决于你走哪条路,但我从来没有见过企业甚至是中等规模的应用程序,它们暴露了数据服务项目/层之外的实体。