域层通过数据传输对象 (DTO) 与其他层进行通信。我对 DTO 感到困惑。
DTO 1 位于领域层和表示层之间。
DTO 2 位于域和数据层之间。
我应该在层之间创建两个不同的 DTO 对象还是只创建一个 DTO。专业的方法是什么?
最佳答案
让我们遍历所有层:
- 数据访问层 (DAL)。它用于从数据库 (DB) 获取数据。
通常它知道领域实体
和领域层。
DAL 可以返回域实体
或DTO(面向数据库的数据结构)
。如果需要,可以使用这些 DTO 或域实体来构建表示层( View 模型
)的 DTO。
域实体通常很重,需要 data mappers或任何 ORM。我更喜欢使用 Domain Entities
,映射它们并避免使用其他 DTO。否则 DTO 也应该被映射。
- 领域层(领域模型)。它用于表示业务实体及其行为、业务规则、纯业务逻辑。
域层应该对实体在某处(例如在数据库中)的存储方式一无所知。它可以有自己的 DTO,这可以是重构的结果 Introduce Parameter Object .
- 表示层 (UI)。它用于向用户呈现 UI。
它应该了解数据访问层
以从数据库加载数据,并了解领域层
以访问其业务逻辑。
它可以有自己的 DTO - View 模型,它们是域实体或数据库友好 DTO 的用户界面友好表示。表示层有责任了解 View 模型
。
如果您打算只有一个表示,您的应用基础设施也可以作为表示层的一部分来实现,但通常它是一个单独的应用层。
关于c# - 领域驱动设计中层与层之间的数据传输对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19746672/