2

我有一個分層設計的應用程序,如下所示。從多個數據庫中保存域模型

Project.Common  // Domain models 
Project.DataAccess // Repositories, Persistence models 
Project.Services 
Project.Web   // Presentation Layer 

Services項目採用UnitOfWork類(在DataAccess項目中定義)來查詢數據庫。 DataAccess中的存儲庫返回Common項目中定義的域模型。 UnitOfWork類將連接枚舉連接到不同的數據庫。

當我需要填充數據來自不同數據庫(不同數據庫服務器)的域模型時,我遇到了一個問題。我將如何做到這一點?

看來我將不得不查詢單獨的存儲庫,每個存儲庫都會返回一個域對象(因爲它暴露給服務層而不是持久對象)。然後從服務層中更簡單的域對象構建更復雜的域對象。這是正確的方法嗎?

示例代碼在Services圖層中查詢數據庫。

using (var unitOfWork = new UnitOfWork(DatabaseConnection.MyDbServer1, requireTransaction: false)) 
{ 
    var repo = RepositoryFactory.GetRepository<IMyRepository>(unitOfWork); 
    IEnumerable<MyDomainObject> output = repo.GetData(); 
} 

回答

2

如果你的業務邏輯,需要從多個持久性模型(數據庫)的信息,那就可以完美地定義一個新的服務模型(Project.Services),將包裹在一個單一的對象信息。然後你會在你的服務層有一個對應的方法,通過查詢底層的存儲庫來返回這個模型。

+0

我的回購檢索持久性模型(它是'Project.DataAccess'內部的)並返回域模型(在'Project.Common'中)。那麼我應該如何使用這些領域模型在'Project.Services'中定義一個新的服務模型,或者可以在'Project.Common'中創建一個更復雜的領域模型? – erdinger

+0

您可以使用這些域模型來構建更復雜的服務模型。 –