1

我们正在尝试使用实体框架 (EF) 和域驱动设计 (DDD) 样式模式方法创建一个 ASP.NET MVC 4 应用程序。正如您在我们的领域层部分看到的,我们有一个复杂的设计。我们需要使用惰性和急切的方法加载实体。不幸的是,我们在 Entity Framework 中对这些方法有一个很大的问题。

据我们了解,在实体框架中,对于预加载,我们必须使用Include方法并给出属性字符串和属性等。(在Hibernate和 Java 中,我们可以使用成员顶部的注释来预加载,这比这种方法)。

但可怕的问题是我们有继承结构和重的多态性。在这些状态下,我们没有应该包含的字符串,因为我们不知道选择了类的哪个派生类来理解应该包含哪些属性。

我们的模型

例如,如您所见,结果有一个项目集合,然后决定向该集合添加一些组,并且每个组都有一些组和字段(如组合模式)。现在假设我们想要加载一个类似于上面讨论的结果。当我想写一个给定包含的字符串时,我不知道这个结果的哪些项目是组。因为我们无法预测这些项目是组,所以这些组有一个应该加载的项目集合。

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

最后我们有一个关键问题:实体框架是为具有复杂域和 DDD 方法的企业应用程序设计的吗?如果不是,我们如何在 C# 软件工程和企业应用中遵循 Martin Fowler 和 Eric Evans 的方法?

4

1 回答 1

0

实体框架是为具有复杂域和 DDD 方法的企业应用程序设计的吗?

是的。

由于许多原因,真实的域模型可能与相应的数据模型在形状上有所不同。像 EF 或NHibernate这样的“企业”ORM 的目标是在两者之间进行转换,甚至支持多个数据库。

我没有真正看到的是您的域模型。您的图表看起来像一个数据模型,它是一个实现细节。我希望看到医生、患者、问卷、预约、治疗、处方等。您可以选择以您描述的方式存储这些(例如,Stack Overflow 将问题和答案都存储为“帖子”),但这就是映射是为了,老实说,如果您使用的是关系数据库,那么最好使用类似于域模型的表。如果您想要一个完全灵活的存储,那么 RDBMS 可能不是正确的工具 - 可以考虑使用文档数据库代替吗?

于 2013-11-16T22:03:34.033 回答