在这些情况下,帮助决定何时使用DTO以及何时使用实体的一般想法是什么?
我喜欢阅读传递实体的代码:
但有关DTO的论点是映射到实体更安全,因为它是一个契约,实体可以改变为任何形式,而DTO将保持不变。例如,类似于实体具有字段名称,并且DTO也具有字段名称。稍后,如果需求更改,数据库表发生更改,实体也可以更改,将名称更改为firstName和lastName。但是DTO仍然会有一个字段名,即firstName + lastName。
所以这里是使用DTO的优点列表:
我能想到的DTO的缺点是:
请分享你的想法..
谢谢!
以下是来自不同地方的一些报价
将实体类重用为DTO 看起来很乱。公共API的 class(包括公共注释) 方法)不再明确定义 合同的目的是什么 呈现。课程结束了 只有在相关的方法 该课程被用作DTO和 一些方法只会 在使用课程时相关 作为一个实体。关注不会 干净利落地分开,事情就会如此 更加紧密耦合。对我而言,这是一个 更重要的设计考虑因素 然后试图节省数量 创建了类文件。
绝对不是!!!
JPA实体映射到数据库, 但他们并没有“绑定”到数据库。 如果数据库发生更改,则更改 映射,而不是对象。该 对象保持不变。那就是 全点!
答案 0 :(得分:6)
我会选择DTO选项,原因如下:
答案 1 :(得分:4)
Pro DTO:
1. UI大多数时候都需要某些属性,这些属性仅用于传递描述UI状态的参数。该状态不需要保持,因此不需要在实体上使用
2.业务逻辑应该在实体内部,或者在entite的辅助类中。您不应与UI / Presentation Layer或客户端调用它共享它
3.实体的变化有时不需要改变DTO,反之亦然。
4.更容易在UI服务中对DTO执行系统级验证,因此在不应该停止对业务服务的调用时。
5.当UI端接收DTO而不是填充来自UI的数据的实体时,您可以自由地实现/使用其他验证框架。
6. UI /表示层松散耦合。
以下是使用DTO时的示例流程:
UI - > MVC - >使用UI服务的系统验证 - >业务代表 - >商业服务 - >持续。