领域驱动设计:DTO 在哪里?
Domain-Driven Design: where are the DTO?
我对领域驱动设计架构有疑问。在我尝试使用 REST 之前,一切看起来都不错。我应该在前端使用 DTO 而不是实体。
我的架构是这样的:
我的问题是:
我应该使用 web 模块 并坚持在 DTO 中使用它吗?这是正确的做法吗?
- 域驱动程序设计 (DDD) 方法于 2003 年由一本同名的书介绍。
- REST 起源于一篇名为 Architectural styles and the design of network-based software architectures 的博士论文,该论文仅在 2000 年发表。
- REST 的传播、建立和流行需要一些时间。大概达到了"world-level popularity"roughly around ~2005-2008.
- DDD 主要指孤立的单片系统,或者至少没有涵盖跨系统通信的各个方面。
因此,即使您工作 "according to DDD",您也必须做出决定 - 如何处理这些方面。
参考:DDD书中介绍的模式列表,及其关系:
您应该将 REST 视为众多 "ports" 允许访问您的应用层服务的其中之一。 REST、RPC、Websocket 等服务将调整输入并将其映射到应用层调用,反之亦然。在每个服务边界,您仍然可以灵活地调整响应,这不一定与应用程序服务方法响应具有 1-1 映射,但可以。
根据 Vaughn Vernon 的《实现领域驱动设计》一书,DTO 位于应用程序层。
理想情况下,域模型应该由工厂创建。所以工厂可以接受 DTO 和 return 域模型的实例。或者您可以使用接受 DTO(s) 的构建器模式来创建域模型。这样,您的域模型就不会受到 DTO 的影响,并且架构图中的应用程序层应该接受 DTO 作为参数。
在你的图中,我不确定应用层的用途是什么。因为我们所说的应用程序应该是领域模型。
我对领域驱动设计架构有疑问。在我尝试使用 REST 之前,一切看起来都不错。我应该在前端使用 DTO 而不是实体。
我的架构是这样的:
我的问题是:
我应该使用 web 模块 并坚持在 DTO 中使用它吗?这是正确的做法吗?
- 域驱动程序设计 (DDD) 方法于 2003 年由一本同名的书介绍。
- REST 起源于一篇名为 Architectural styles and the design of network-based software architectures 的博士论文,该论文仅在 2000 年发表。
- REST 的传播、建立和流行需要一些时间。大概达到了"world-level popularity"roughly around ~2005-2008.
- DDD 主要指孤立的单片系统,或者至少没有涵盖跨系统通信的各个方面。
因此,即使您工作 "according to DDD",您也必须做出决定 - 如何处理这些方面。
参考:DDD书中介绍的模式列表,及其关系:
您应该将 REST 视为众多 "ports" 允许访问您的应用层服务的其中之一。 REST、RPC、Websocket 等服务将调整输入并将其映射到应用层调用,反之亦然。在每个服务边界,您仍然可以灵活地调整响应,这不一定与应用程序服务方法响应具有 1-1 映射,但可以。
根据 Vaughn Vernon 的《实现领域驱动设计》一书,DTO 位于应用程序层。
理想情况下,域模型应该由工厂创建。所以工厂可以接受 DTO 和 return 域模型的实例。或者您可以使用接受 DTO(s) 的构建器模式来创建域模型。这样,您的域模型就不会受到 DTO 的影响,并且架构图中的应用程序层应该接受 DTO 作为参数。
在你的图中,我不确定应用层的用途是什么。因为我们所说的应用程序应该是领域模型。