2013-05-06 67 views
1

在我們的DDD項目中,我們使用Factory來創建我們的初始聚合根模型'Order'。有一個業務規則,說新的訂單有他們的供應商的Order.Supplier默認給一個特定的供應商。我們需要從數據庫中提取默認供應商。域模型工廠可以調用存儲庫嗎?

在創建初始訂單以獲取默認值時,可以在訂單工廠中調用供應商存儲庫嗎?我知道工廠的目的是在有效的狀態下創建模型。有效的新狀態需要設置默認值。在這種情況下,我允許調用存儲庫,還是應該將默認供應商傳入工廠構造函數?

回答

1

對你的問題的簡單回答是,簡單地說是。

+0

謝謝。從技術上講,對象初始化供應商時仍然有效,並且不設置默認值,我不確定這是否是正確的地方。 – user2354863 2013-05-06 20:51:57

+0

我傾向於傾向於讓應用服務調用存儲庫並將所需數據傳遞到工廠。這可以減少耦合並增強SRP。 – eulerfx 2013-05-07 18:14:40

+1

不要分割頭髮,但我不會把它放在應用程序服務中,而是放在域服務中(如果不想在工廠中存儲庫的依賴項),那就體現了用例。但總而言之,我們現在正在談論細節,個人經驗和便利。 – 2013-05-07 18:26:49

0

它可以,還有一個非常特殊的情況,工廠需要來調用一個存儲庫。當通過ORM(NHibernate HiLo例如)生成的彙集身份信息庫將暴露的方法像

class SomeRepository { 
    ... 
    Identity Generate(); 
    ... 
} 

如果總建設是複雜的,足以值得專門的工廠,很自然地從工廠叫「生成」 。

2

+1的事實廠一個的DomainService可以訪問一個復位器。

-1:

我覺得這無關域在所有。我認爲這是一個應用程序規則。

想一想:如果企業現在決定默認供應商是另一個供應商,那該怎麼辦?這是一個規則,需要改變你是哪個企業?這需要改變你的工廠嗎?可以嗎?

記住:域指向「我們在哪個業務」而不是「我們如何做生意」。

我寧願把它放在ApplicationService上。該域名不需要知道是否有默認供應商。無論如何,它可能需要一個「供應商」。

順序可能有一個構造函數,說訂單(供應商的供應商) - >這將迫使吶爲了有一個供應商。

或者工廠在其方法中可能會收到DefaultSupplierId。

但該域名不應該知道它。它不適合我的觀點。

布魯諾