显然我说 DDD 在实用性上类似于 EAV/CR 是错误的,但到目前为止我看到的唯一区别是为每个实体构建的物理表具有大量连接,而不是三个表和大量连接。
这一定是由于我缺乏对DDD的理解。 在导入数据时,如何将这些对象物理存储到数据库中而不会产生重大的连接和复杂性? 我知道您可以简单地创建输入到您的存储库的对象,但是很难训练像 Microsoft Sql Server Integration Server 这样的工具来使用您的自定义 C# 对象和框架。也许这应该是我的问题,您如何将您的 DDD ASP.NET C# 框架与 Microsoft SQL Server 集成服务和报表服务一起使用?哈哈。
在 EAV/CR 数据库中,我们可以根据人员类型设置具有不同类的单个人员表:供应商、客户、买方、代表、公司、清洁工等。三个表,一些连接,属性始终是字符串在我们插入之前进行验证,就像 MVC 中的 ModelValidation 一样,对象接受任何值但在它有效之前不会持续存在。
在标准的关系模型中,我们曾经为每种类型的实体创建一个表,并混合了像 City 这样的冗余数据类型。
使用领域驱动设计,我们使用对象来表示每种类型的实体、每种类型的 ValueObject 的嵌套对象,以及更多嵌套对象仍然是必要的。在我的理解中,这会为每种实体生成一个表,为每种信息集(值对象)生成一个表。对于所有这些表,我看到了很多连接。我们最终还为每种新的联系人类型创建了一个物理表。显然有更好的方法,所以我在如何将对象持久保存到数据库方面一定是不正确的。
我的供应商看起来像这样:
public class Vendor {
public int vendorID {get; set;}
public Address vAddress {get; set;}
public Representative vRep {get;set;}
public Buyer vBuyer {get; set;}
}
我的买家:
public class Buyer {
public int buyerID {get; set;}
public Address bAddress {get; set;}
public Email bEmail {get; set;}
public Phone bPhone {get; set;}
public Phone bFax (get; set;}
}
我们真的引用了 Vendor.vBuyer.bPhone.pAreaCode 之类的东西吗?我想我们会引用和存储 Vendor.BuyerPhoneNumber,并构建对象几乎就像这些部分的别名:Vendor.Address1、Vendor.Address2、Vendor.BuyerPhoneNumber ... 等等。