【发布时间】:2011-01-16 18:46:26
【问题描述】:
显然我说 DDD 在实用性上类似于 EAV/CR 是错误的,但到目前为止我看到的唯一区别是为每个实体构建的物理表具有大量连接,而不是三个表和大量连接。
这一定是由于我对 DDD 缺乏了解。 在导入数据时如何将这些对象物理存储到数据库中而不需要大量的连接和复杂性?我知道您可以简单地创建输入到您的存储库的对象,但是很难训练像 Microsoft Sql Server 这样的工具Integration Server 使用您的自定义 C# 对象和框架。也许这应该是我的问题,您如何将您的 DDD ASP.NET C# 框架与 Microsoft SQL Server 集成服务和报表服务一起使用?哈哈。
在 EAV/CR 数据库中,我们可以根据人员的类型设置具有不同类的单个人员表:供应商、客户、买方、代表、公司、清洁工等。三个表,一些连接,属性是在我们插入之前总是带有验证的字符串,就像 MVC 中的 ModelValidation 一样,对象接受任何值但在它有效之前不会持续存在。
在标准关系模型中,我们曾经为每种类型的实体创建一个表,混合了冗余数据类型,如城市。
使用领域驱动设计,我们使用对象来表示每种类型的实体,为每种类型的 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 ... 等等。
【问题讨论】:
标签: c# sql-server ssis domain-driven-design object-persistence