2011-10-17 25 views
2

我開始在DD的世界中,並試圖構建一個足夠簡單的應用程序。我有幾個關於如何選擇建模我的域的問題。建模以下場景的最佳方法

我的應用程序允許用戶訂購賀卡。 用戶可以一次訂購任意數量的卡片。 當選擇一張卡片進行訂購時,他們瀏覽卡片目錄。然而,卡片目錄並不是本地存儲的,它是從外部系統檢索的,但是他們在他們當前會話中瀏覽過的每張卡片將在本次會話的整個生命週期內本地緩存在數據庫中,以防他們希望添加到訂單中。

當他們將卡添加到訂單時,它將繼續新訂單行項目。然後,必須爲訂單行項目,顏色,問候等指定一些其他詳細信息...

我的問題是這樣的: 如何在我的域中對卡進行建模。我將訂單作爲一個聚合根,包含許多訂單行項目。每個訂單行項目都有一定的屬性和一張卡片。

但是,我的卡片目錄也會有一個卡片概念,該卡片概念與我的訂單行項目中的卡片具有相同的屬性。

我是否正確地將這些卡建模爲2個獨立的實體(CatalogueCard和OrderCard),即使它們具有相同的一組屬性?

對於卡片必須寄給的地址(每個訂單行項目都有一個地址)和訂單的帳單地址,也可以提出同樣的問題。這些應該模仿爲完整的獨立實體嗎?

在此先感謝

回答

1

,你看到重複您建模域的業務實體的概念,這意味着你可能是在正確的軌道上。但是如果你有兩個具有相同屬性的對象,你應該只使用一個。 CatalogueCard和OrderCard應該是實例名稱,而不是類名稱,除非您希望進行某些更改,否則您可以從基類卡片類繼承。你的地址班也一樣。只需使用一個地址類。地址類型應該是另一個屬性,可以是您的模型支持的地址類型的枚舉值。

+0

感謝您的回覆。如果卡片具有不同的行爲會怎麼樣。比方說,一個CatalogueCard與CardThemes有一對多的關係,但是一個OrderCard只能有一個CardTheme,即用戶必須爲這個訂單選擇一個主題。您是否將其模型化爲帶有與CardTheme自身關係的OrderCard繼承的BaseCard?我猜地址是不同的,因爲它沒有行爲,地址實際上是一個值對象。再次感謝 – user933709

+0

我會稱之爲業務規則而不是行爲,是的,繼承是處理它的好方法。但是對於你的例子來說,它實際上可能非常簡單,因爲單個主題仍然可以使用相同的數據結構(集合/數組),並且僅限於1個元素。所以在這個例子中,你的Card派生類只會在約束條件方面有所不同。 –

相關問題