2010-02-14 56 views
1

很明顯,我錯誤地說DDD與EAV/CR的用處相似,但我目前看到的唯一區別是每個實體都有大量連接而不是三個表和大量連接的物理表。DDD值對象:如何在沒有大量SQL連接的情況下堅持實體對象?

這一定是由於我缺乏對DDD的理解。 在導入數據時,如何將這些對象物理存儲到數據庫中,而無需大量連接和複雜化?我知道你可以簡單地創建提供給你的存儲庫的對象,但是很難培訓像Microsoft Sql Server Integration Server這樣的工具來使用你自定義的C#對象和框架。也許這應該是我的問題,你如何使用Microsoft SQL Server集成服務和報表服務使用DDD ASP.NET C#框架?大聲笑。

在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 ...等。

回答

1

真正的答案是將您的SQL規範化策略與您的對象相匹配。如果您有很多重複的地址,並且需要將它們關聯在一起,則將數據標準化爲單獨的表,從而創建對值對象的需要。

1

您可以將您的對象序列化爲xml並將其保存到Sql Server中的xml列。畢竟,您試圖表示一個分層數據結構,這就是xml的優點。

1

域驅動的設計支持者通常建議儘可能將數據模型儘量靠近對象模型,但這不是一個鐵定的規則。

如果您在對象關係映射圖層中創建映射以將數據轉換(投影)到對象中,則仍然可以使用a EAV/CR database design

決定如何設計您的對象並提供對子值的訪問實際上是一個單獨的問題,您必須根據具體情況解決。 Vendor.BuyerPhoneNumberVendor.vBuyer.bPhone.pAreaCode?答案總是取決於,因爲它植根於您的具體要求。

相關問題