2012-07-11 77 views
0

服務具有dal和域模型圖層。域模型可以訪問dal來操作數據庫。現在需要在域模型中擁有來自另一個對象的一些屬性(這將大大簡化客戶端使用)。但是我對將這些屬性(來自「外星人」)的對象填充到給定對象的位置感到困惑。我可以在域模型中做到嗎?或者在服務本身?要訪問另一個域模型對象的域模型對象

由於我是DDD新手,我會用我自己的話來解釋它。項目具有結構爲: DAL(知道DTO) DTO 的DomainModel(知道DAL和DTO) 服務(知道的DomainModel和DTO)

服務返回的DTO,並假設我需要添加一些屬性dto1(它由domainModel1類操縱),它可以由domainModel2類自然地檢索。所以,問題是什麼層最適合這個?

P.S.Since模型是一個系統的投影,它是它的元素之間的關係,比沒有從domainModel1調用daominModel2的原因,是嗎?

+0

由外星人你的意思是在另一個聚合根?如果您可以使用DDD術語,您可以在不顯示課程結構的情況下提出一些問題但是,如果不是,你需要展示足夠的結構讓你知道爲什麼你認爲物體是外星人 – Berryl 2012-07-11 10:14:26

+0

對不起,我是DDD的新手。外星人我的意思是說,如果classA被修改爲擁有classB的某些屬性,那麼我應該把邏輯放在使用classB的能力來檢索它的屬性,並將其中的一些拷貝到classA – Nickolodeon 2012-07-11 10:25:56

+0

你是否有一些用例心裏?它取決於用例和滿足用例的類。如果B類可以訪問dal並且與A類有關係,則沒有一般的DDD原因,即更新A的邏輯不能在B中。 – Berryl 2012-07-11 10:42:08

回答

0

我需要增加一些屬性dto1(由 domainModel1類操作)

這裏的問題似乎是,你的域對象操縱DTO的。您的域圖層應該不受DTO和DAL的影響。

DTO's是特定應用程序如何呈現其數據的細節。 DAL是特定應用程序如何存儲數據的細節。這些需要從域中分離出來。

你的域名不應該依賴細節。細節應該取決於域名。

您提到需要將另一個對象的某些屬性添加到DTO,這是爲了客戶端的使用目的。 因此,不要在域中處理。在應用層創建一個服務,將來自Entity1和Entity2的一些數據聚合到DTO中,然後將DTO傳遞給客戶端。