首页 > 解决方案 > AutoMapper 模式是否违反 DDD 原则?

问题描述

我最近在尝试 Abp 框架,很高兴地发现它是 DDD 的一个很好的实现。但由于它使用 AutoMapper 将 DTO 转换为实体/聚合,我注意到它能够使我的私有聚合设置器短路,这显然违反了 DDD 的主要规则。虽然 AutoMapper 的目标是减少手动操作,但 DDD 通过私有 setter 强调不变量。

怎样才能把这两个看似矛盾的概念搞清楚,并顺利使用这个框架呢?这是否意味着我必须放弃 AutoMapper 以保持 DDD 原则,反之亦然?

我相信 AutoMapper 不是 DDD 的反模式,因为它在社区中非常流行。换句话说,如果 AutoMapper 可以使用反射(据我所知)来设置私有设置器,那么其他任何人都可以。这是否意味着私人二传手本质上是不安全的?

感谢任何人可以帮助我或给我一个提示。

标签: domain-driven-designautomapperabp

解决方案


AutoMapper是:.NET 中基于约定的对象-对象映射器。

AutoMapper 本身并没有违反 DDD 的原则。可能是您使用它的方式。

怎样才能把这两个看似矛盾的概念搞清楚,并顺利使用这个框架呢?这是否意味着我必须放弃 AutoMapper 以保持 DDD 原则,反之亦然?

不,您不必放弃 AutoMapper。
您可以.IgnoreAllPropertiesWithAnInaccessibleSetter为每个地图指定。

相关:如何将 AutoMapper 配置为全局忽略所有具有不可访问 Setter(私有或受保护)的属性?

换句话说,如果 AutoMapper 可以使用反射(据我所知)来设置私有设置器,那么其他任何人都可以。这是否意味着私人二传手本质上是不安全的?

不,这意味着反射非常强大。


推荐阅读