2012-02-15 85 views
6

我想跟隨DDD,我有一個問題類和反饋類(等)。我希望能夠計算問題的數量,反饋的數量以及其他許多被認爲是元操作的東西。DDD中的存儲庫類

如果這種「元」的方法是在同一個存儲庫屬於該類的其他方法,或者他們應該在一個MetaRepository,你必須查詢數據庫(在這種情況下,所有類都將混合不同的元方法)?

+2

哪種設計最準確地映射到您的域名? – blueberryfields 2012-02-15 21:39:08

+0

其實我覺得兩者都很好。這仍然是在白板上,所以我願意改變:)如果我不得不選擇沒有人告訴我該怎麼做,我會把元方法放在它們所屬的類中。 – LuckyLuke 2012-02-15 21:41:46

+0

這兩個地圖同樣適合您的域名嗎?例如,問題/反饋可能是某種容器的一部分,如文檔或調查問卷。容器可能知道它包含多少,什麼是什麼,並且可能需要計數方法。 – blueberryfields 2012-02-15 23:05:32

回答

8

在DDD沒有什麼目的創建MetaRepository禁止每個聚合擁有多個存儲庫。您可以簡單地爲基本查詢和生命週期方法(IQuestionsRepository)提供一個存儲庫,併爲您稱爲「元」或「統計」目的(IQuestionsStatistics)的單獨存儲庫。這對於一個較大的域很有效,其中以下原則可能導致「方法爆炸」和SRP違規,其中單個存儲庫每聚合。 DDD不應違背基本的OOP原則。

1

對我而言,每個存儲庫都負責計算其元素,它是getById,getAll ...(標準方法)中的一種方法。

0

這些問題(「多少次反饋?」)以及它們指的是你的域的一個重要部分的數量?

如果是這樣,他們似乎是合理的查詢,把你的存儲庫。畢竟,您的存儲庫的工作是回答與其包含的聚合有關的域相關問題。

如果不是,例如如果這只是偶然的東西,可能會顯示給用戶,那麼這些問題可能屬於應用服務,完全在域層之外。

0

我會堅持每多域模型類單個存儲庫中,或使用一個通用存儲庫

我個人從來沒有見過有人爲你描述