9

将休眠实体带到表示层是一种好习惯吗?或者我们是否需要将实体的所有属性映射到一个值对象并且值对象将用于 UI?

请让我知道这两种方法的优缺点。

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

4

2 回答 2

13

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

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

  • 好处:
    • 一个模型
    • 无需在模型之间映射
    • 更容易使用延迟加载
  • 缺点:
    • 模型的每一次变化都意味着视图的变化
    • 传输层的许多缺点见下文

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

  • 好处:
    • 当模型发生更改时,DTO/视图不必更改
    • 避免通过存在大量问题的线路发送实体(延迟加载异常,发送大量不需要的数据,暴露敏感信息,...)
    • 模型的职责更少(序列化),这使得它们更容易重用(例如后端处理)
  • 缺点:
    • 更多类要写
    • 将实体转换为 DTO 的代码
于 2012-07-04T18:52:47.323 回答
0

如果您跨不同的层和模块公开您的实体,您还可以获得更多的性能和 RAM 使用效率。走哪条路完全取决于您,但我从未见过企业甚至中型应用程序将实体暴露在其数据服务项目/层之外。

于 2015-01-08T18:59:05.720 回答