domain-driven-design - AutoMapper 模式是否违反 DDD 原则?
问题描述
我最近在尝试 Abp 框架,很高兴地发现它是 DDD 的一个很好的实现。但由于它使用 AutoMapper 将 DTO 转换为实体/聚合,我注意到它能够使我的私有聚合设置器短路,这显然违反了 DDD 的主要规则。虽然 AutoMapper 的目标是减少手动操作,但 DDD 通过私有 setter 强调不变量。
怎样才能把这两个看似矛盾的概念搞清楚,并顺利使用这个框架呢?这是否意味着我必须放弃 AutoMapper 以保持 DDD 原则,反之亦然?
我相信 AutoMapper 不是 DDD 的反模式,因为它在社区中非常流行。换句话说,如果 AutoMapper 可以使用反射(据我所知)来设置私有设置器,那么其他任何人都可以。这是否意味着私人二传手本质上是不安全的?
感谢任何人可以帮助我或给我一个提示。
解决方案
AutoMapper是:.NET 中基于约定的对象-对象映射器。
AutoMapper 本身并没有违反 DDD 的原则。可能是您使用它的方式。
怎样才能把这两个看似矛盾的概念搞清楚,并顺利使用这个框架呢?这是否意味着我必须放弃 AutoMapper 以保持 DDD 原则,反之亦然?
不,您不必放弃 AutoMapper。
您可以.IgnoreAllPropertiesWithAnInaccessibleSetter
为每个地图指定。
相关:如何将 AutoMapper 配置为全局忽略所有具有不可访问 Setter(私有或受保护)的属性?
换句话说,如果 AutoMapper 可以使用反射(据我所知)来设置私有设置器,那么其他任何人都可以。这是否意味着私人二传手本质上是不安全的?
不,这意味着反射非常强大。
推荐阅读
- doctrine-orm - 教义找不到实体
- sql - 在 VB.NET 中执行查询会导致 GUI 错误
- php - PHP:查找缺少元素的数字数组的最高索引
- python-3.x - PySCIPOpt/SCIP - 带分数变量的分支/分离
- delphi - 如何使 ComboBox 下拉列表比 ComboBox 本身更窄*
- arduino - Arduino中断函数
- kubernetes - 如何在 kops 部署的集群中创建 st1 存储类?
- angular5 - 如何将 javascript 和 d.ts 文件添加到 Angular 2 项目
- c# - 在事件上使用 GUI 功能 (MVVM)
- javascript - 环回电子邮件连接器连接 ETIMEDOUT 错误