实体框架和预先加载和企业应用程序与DDD的aproach(Entity framework and

2019-10-18 23:53发布

ITNOA

我们正试图创建一个使用实体框架与领域驱动开发风格模式方法的ASP.NET MVC应用4。 正如你可以在我们的领域层的部分看到的,我们有一个复杂的设计。 我们需要懒惰以及渴望方法来加载实体。 不幸的是我们在实体框架这些方法的大问题。

据我们了解,在EF预先加载,我们必须使用Include方法,让性能和性能等特性的字符串(在Hibernate和Java,我们可以利用成员的注释顶部加载热切,它是如此比这更简单方法)。 但可怕的问题是,我们有继承结构和重多态性,在这些国家,我们没有这是我们应该给予包括,因为我们不知道哪些派生类类的选择,了解其性能应包括做字符串。

例如,你可以看到结果了项目的集合,然后决定将一些组添加到该集合每个小组有一定的群体和领域(如构图模式)。 现在想象一下,我们要加载的结果就像是一个上面谈到。 当我想要写的给定一个字符串包括我不知道这是什么结果的项目组。 因为我们无法预测这些项目组等这些团体应加载项的集合。

this.Items = new List<Item> 
            {
                new Group(
                    a,
                    new List<Item>
                    { 
                        new Field(b),
                        new Field(c),
                        new Field(d),

最后我们有一个关键的问题:是专为企业应用程序具有复杂域和DDD的做法实体框架? 如果没有,我们如何遵循Martin Fowler的和埃里克·埃文斯在软件工程和C#中的方法企业级应用?

Answer 1:

是专为企业应用程序具有复杂域和DDD的做法实体框架?

是。

一个真正的域模型的形状可以从有很多原因相应的数据模型是不同的。 像EF或NHibernate的“企业” ORM的目标是在两者之间转换,甚至支持多个数据库的地步。

我真的不看是你的域模型。 您的图看起来像一个数据模型,这是一个实现细节。 我希望看到医生,患者,问卷调查,预约,治疗,处方等,您可以选择将这些存储在你所描述的样式(StackOverflow上同时存储的问题和答案为“帖子”,例如),但是这就是映射是的,如果您使用的是关系型数据库,你可能会更好具有类似于域模型表是诚实的。 如果你要为一个完全灵活的存储那么RDBMS可能是不正确的工具 - 考虑也许是一个文档数据库呢?



文章来源: Entity framework and Eager loading and enterprise application with DDD aproach