【发布时间】:2020-07-11 18:35:12
【问题描述】:
我最近在尝试 Abp 框架,很高兴地发现它是 DDD 的一个很好的实现。但是由于它使用 AutoMapper 将 DTO 转换为实体/聚合,我注意到它能够使我的私有聚合设置器短路,这显然违反了 DDD 的主要规则。虽然 AutoMapper 的目标是减少人工操作,但 DDD 强调通过私有 setter 实现不变性。
怎样才能把这两个看似矛盾的概念搞清楚,并顺利使用这个框架呢?这是否意味着我必须放弃 AutoMapper 才能保留 DDD 原则,反之亦然?
我相信 AutoMapper 不是 DDD 的反模式,因为它在社区中非常流行。换句话说,如果 AutoMapper 可以使用反射(据我所知)来设置私有设置器,那么其他任何人都可以。这是否意味着私有 setter 本质上是不安全的?
感谢任何可以帮助我或给我提示的人。
【问题讨论】:
-
为什么要将 DTO 转换为实体/聚合?
-
来自客户的数据总是以 DTO 的形式上传,经过验证后,无论使用什么方法,在持久化之前,它们当然必须转换为实体/聚合。
-
在这种情况下,翻译行为成为领域模型的实际行为,不可避免地导致领域模型贫乏。如果你问我,就达不到目的。
-
谢谢,我理解你的建议。我还有一个问题:如果我有一个相对较大的聚合并且它的大部分属性是强制性的,这是否意味着我必须创建一个具有长(而且我看到丑陋)参数列表的构造函数?有什么优雅的方法来处理这个问题吗?
-
取决于您要解决的问题。但是有很多选择——你可以传入字典,你可以使用构建器/工厂模式。您也可以拆分聚合。
标签: domain-driven-design automapper abp