DDD 和自动映射器是否击败了延迟加载

本文关键字:延迟加载 是否 映射 DDD | 更新日期: 2023-09-27 18:32:02

我正在研究一个n层域驱动设计项目,该项目使用实体框架4 DB-First和Automapper在域的命名空间中生成POCO。

澄清一下:EF 项目返回 MyProject.Repositories.EF.Entities 命名空间中的实体,我使用 Automapper 将它们转换为 MyProject.Domain.Entities 命名空间中的实体。

现在,我无法完全确定当我在 EF 和 Domain 实体之间映射时,是否枚举了所有集合属性,即在映射它们时是否也从数据库中检索了所有相关数据,或者当我在代码中实际枚举它们时,它们是否仍然只是延迟加载。

我担心明显的性能影响。

DDD 和自动映射器是否击败了延迟加载

事实证明答案是否定的。只要您在两个 IEnumerable 之间映射,实际的枚举只会在执行 foreach、ToList() 等时发生。如果不对这些对象的 IEnumerable 属性执行操作,则枚举将永远不会发生,并且不会检索相关数据。

话短说 - 这不是AutoMapper关心的问题,而是你如何使用ORM的问题。AutoMapper只是删除你已经写的代码,所以如果你对你的ORM编写糟糕的执行代码,AutoMapper会很乐意答应。

人们在使用AutoMapper之前滥用ORM,同时使用AutoMapper,以及使用AutoMapper之后。如果使用得当,延迟加载是一个强大的工具,但仍然可能被滥用。使用延迟加载并不妨碍开发人员了解幕后实际发生的事情。

因此,请使用AutoMapper,但要小心获取,就像您不使用AutoMapper时应该做的一样。