大規模なプロジェクトの一部である MVC データ メンテナンス アプリケーションを作成しています。ドメイン駆動設計の DDD を使用しようとしています。SO には、これに関する他の質問が既にあります。たとえば、here、here、およびhereです。しかし、彼らは私の質問に完全には答えていません。
データベースには 755 個のテーブルがあるため、データ層にも境界付けられたコンテキストがあります。そのため、ビジネス、役割、製品、顧客などの境界付けられたコンテキストを作成しました。
私たちが抱えている問題は、MVC アプリケーションには、最終的に複数の境界付けられたコンテキストにまたがる ViewModel を使用する「初期設定」のビューがあることです ( Entity Framework 6 の IUnitOfWork パターンを使用)。したがって、そのビューはビジネス コンテキストとロール コンテキストに書き込む必要があります。
ドメイン モデルには、1つBusiness
のモデルAddress
と 1 つのモデルと、より大きな pobject グラフ内の他のいくつかのモデルがあります。
ViewModelは、これら 2 つのドメイン モデルとその他のドメイン モデルをフラット化して単純化したモデルです。
public class InitialSetupViewModel
{
string BusinessName{get;set;}
string Street{get;set;}
string Street2{get;set;}
string State{get;set;}
string ZIP{get;set;}
...
}
この ViewModel は、 Automapperで行っているドメイン モデルにマップする必要があります。
コントローラーにドメイン サービスが注入されます。
public class SetupController : Controller
{
private readonly IMaintenanceService service;
public SetupController( IMaintenanceService maintenanceService = null )
{
service = maintenanceService;
}
public void Create(...????....)
{
service.CreateBusiness(..?.);
}
}
問題:
サービスはについて知ることができない
InitialSetupViewModel
ので、何をサービスに渡す必要がありますか?BusinessDbContext
サービスはおよびについて認識している必要がありRolesDbContext
ます。そのため、両方で SaveChanges() を呼び出す必要があります。これは、単一の IUnitOfWork を持つという目的に反します。ビジネス エンティティとロール エンティティの両方を含む別の UnitOfWork を作成する必要がありますか?
この MVC ビューを機能させるためだけに、これら 2 つの IUnitOfWorks を 1 つに結合することは正当化できないと思います。しかし、解決策は何ですか?
ありがとうございました!