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体系结构中的域类所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)