3

我對如何處理不是數據庫中數據表示的實體做了一個問題,而是一個我爲商業目的需要的自定義實體。DDD和實體框架中的聚合

我的解決辦法是在結構化:

  • 實體組件(POCO對象)
  • 庫組件(EF代碼優先)
  • 商業層組件
  • UI組件(MVC)

在我的實體程序集中,我有兩個實體AB,並且對於特定的p urpose我的業務邏輯,我需要返回一個包含兩個(其它性質)的對象:

class X 
{ 
    public A[]; 
    public B[]; 
} 

我應該從資源庫中直接返回該對象?或者業務層應該調用repo.GetArepo.GetB,然後創建X並返回它?

在這種情況下,在業務層中創建對象也許是有意義的。但是如果X類是AB的「group by」?然後從存儲庫返回它更有意義。

我猜沒有銀彈,但有沒有指導方針?

乾杯。

+0

要遵循真正的DDD,我認爲您的實體和存儲庫接口應該都在業務(域)層。 –

回答

4

我想你需要弄清楚X所屬層和它到底是什麼:

  • 域的實體,即它傳達來自通用語言域的概念。在這種情況下,X可能是一個包含AB子實體列表的聚合根。除數據外,它還可能有方法。 X的存儲庫將保留A和B集合以及X對象,並且不存在AB的存儲庫。

  • 一個UI特定或用例特定的數據結構。在這種情況下,域層與X沒有業務關係。應用程序或UI層將負責執行AB實例和X對象之間的映射。

+0

如果它是特定於UI的,會發生什麼情況,但是將其從存儲庫中創建出來會非常昂貴?例如:一個加入/分組幾個表的實體結果? – vtortola

+0

除了正常的軟件倉庫,您可以擁有專門的「分析」倉庫。類似的問題在這裏討論:http://stackoverflow.com/questions/2098112/ddd-how-to-implement-high-performing-repositories-for-searching,http://stackoverflow.com/questions/2558469/ddd-骨料基層 – guillaume31

2

我的理解是,存儲庫應該總是處理業務類型的對象。對你而言,這相當於返回X類型對象的存儲庫。如何創建X是存儲庫的業務。這可以通過2個數據映射器獲取A然後B併合並結果或其他適當的過程。