domain-driven-design – 将表映射到DDD体系结构中的域类

domain-driven-design – 将表映射到DDD体系结构中的域类,第1张

概述我的应用程序分为几个程序集. MyProject.Core程序集包含所有Domain对象,如Person和Sale,以及接口存储库,如IPersonRepository和ISaleRepository. MyProject.Data应该处理持久性,但我对这应该如何工作有点困惑.我应该使用Entity Framework将我的表映射到域模型吗?我应该使用Fluent API吗?或者我应该实例化模型类 我的应用程序分为几个程序集.

MyProject.Core程序集包含所有Domain对象,如Person和Sale,以及接口存储库,如IPersonRepository和ISaleRepository.

MyProject.Data应该处理持久性,但我对这应该如何工作有点困惑.我应该使用Entity Framework将我的表映射到域模型吗?我应该使用Fluent API吗?或者我应该实例化模型类并手动填充它们?

解决方法 IMO您不应该尝试将域模型对象用作实体框架实体.您将无法正确制作由原子方法组成的封装域对象.相反,他们需要拥有EF所需的getter和setter的公共属性,这导致 Anemic Domain Model.

基本上:如果您尝试将域对象加倍为实体框架实体,则会危及设计.

相反,我使用了memento pattern,我使用作为纪念品的EF实体重新保存我的域对象.

鉴于EF可以只使用普通的POCO,我会将这些类放在托管DbContext / RespositorIEs的程序集的不同程序集中,因为您的模型需要引用它们.因为它们只是POCO,所以你不会将你的模型与EF绑在一起.

所以你可能有三个组件:

> MyProject.Model …包含您的DDD模型类
> MyProject.Data …包含DBContext和RepositorIEs
> MyProject.Mementos …包含您的EF POCO

例:

public class PersonRepository  : EntityFrameworkRepository,IPersonRepository{      public Person GetByID(GuID personID)      {           using (MyDbContext ctx = new MyDbContext())           {                var personMemento = (from p in ctx.People                                   where p.PersonID == personID                                   select p).FirstOrDefault();                return Person.RestoreFromMemento(personMemento);           }      }}
总结

以上是内存溢出为你收集整理的domain-driven-design – 将表映射到DDD体系结构中的域类全部内容,希望文章能够帮你解决domain-driven-design – 将表映射到DDD体系结构中的域类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1064707.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存