【发布时间】:2025-12-10 08:25:02
【问题描述】:
在多层应用程序中,DTO(数据传输对象)的正确位置是什么?有这样的观点 DTO 是用于数据存储层到域层的通信,但不适合域层到上层逻辑层的交互。
我正在开发具有以下层的应用程序:数据存储、域、服务、表示。那么连接服务层和表示层的正确方法是什么?我认为从域层外部开放对域对象的访问是封装违规,因此解决该任务的唯一方法是使用 DTO,但我不确定。
【问题讨论】:
在多层应用程序中,DTO(数据传输对象)的正确位置是什么?有这样的观点 DTO 是用于数据存储层到域层的通信,但不适合域层到上层逻辑层的交互。
我正在开发具有以下层的应用程序:数据存储、域、服务、表示。那么连接服务层和表示层的正确方法是什么?我认为从域层外部开放对域对象的访问是封装违规,因此解决该任务的唯一方法是使用 DTO,但我不确定。
【问题讨论】:
很多人(尤其是DDD爱好者)说DTO只是为了远程调用,基本上是为了封装那些远程对象。
话虽如此,我真的更喜欢尽可能明确地将我的表示层与我的服务层分开。表示层需要与服务层大量隔离。尤其是在较厚的客户端成为新规范的情况下(Angular 网站、移动设备等)。这意味着将您的服务层视为远程服务通常是一项不错的投资。无论如何,随着时间的推移,它可能会成为一个真正的远程接口。
UI/服务边界通常也是最难确定合同故障的地方...大多数 UI 框架在识别重大更改方面做得很糟糕。
【讨论】: