【发布时间】:2017-05-06 12:00:11
【问题描述】:
我作为初学者已经开始了一个 Spring Rest 项目。我的大多数实体都有超过 15-20 个属性,并不是 UI 层需要所有属性。
我正在考虑使用 DTO,原因如下:
- 尽量减少出于信息隐私原因发送的不必要信息。
- 为了提高性能而减小 json 字符串的大小。
- 使用相同实体的不同 UI 可能具有不同的业务验证(即强制/可选字段)。我可以为同一个实体创建 2 个 DTO 并相应地注释验证。
我正在考虑使用 DTO 将多个实体合并在一起,根据角色隐藏/显示某些 UI 的某些信息,但是当我需要保留详细信息时,我必须将 DTO 信息“拆分/复制”回不同的实体.
员工 - 能够查看下一级经理的绩效评估和 cmets。 经理 - 可以输入 cmets 进行绩效评估,并显示员工的加薪(员工 UI 中没有显示),但无法查看员工当前的工资。 HR - 能够查看所有 UI 的所有详细信息。
我想知道是否有更好的方法来处理这些问题,或者我的项目是否朝着正确的方向前进?
参考:http://www.baeldung.com/entity-to-and-from-dto-for-a-java-spring-application
【问题讨论】:
-
有很多方法,比如使用 JSON 视图。但坦率地说,我发现使用 DTO 更简单、更简洁。它避免了给一个实体两个责任。它还可以更轻松地处理延迟加载的属性。不过,我非常讨厌 Dozer:它将实体和 DTO 耦合在一起,使得使用不可变 DTO 变得困难,并且使代码无法安全地重构。
-
我发现单独使用实体无法满足我的要求,因此我正在查看 DTO 而不是实体。我也会看看 JSON 视图。谢谢!