c# - 领域驱动设计中层与层之间的数据传输对象

标签 c# java architecture domain-driven-design dto

enter image description here

域层通过数据传输对象 (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 模型

如果您打算只有一个表示,您的应用基础设施也可以作为表示层的一部分来实现,但通常它是一个单独的应用层。

enter image description here

关于c# - 领域驱动设计中层与层之间的数据传输对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19746672/

相关文章:

Java Component.show()/hide() 已弃用……为什么?

java - Java 中的换行转义序列未以正确的方式取消转义

java - 如何为导入语句创建自定义 IntelliJ 警告/错误?

web - 尊重 cloudflare 中的语言标题

c# - 如何根据用户的选择显示特定数量的文本框?

c# - 按降序自然排序字符串列表 C#

ruby - 如果它们是字面子类,如何在 ruby​​ 中组织类

database - 哪种 DBMS 最适合 MMORPG 游戏服务器?

c# - 如何在 Azure Active Directory 中使用多个 OpenIdConnectAuthenticationOptions

c# - 根据 Enabled 属性更改用户控件上的属性