私は大規模なプロジェクトを開始しており、DDD を使用したいと考えています。主な問題は、NH のデータとマッピングを複製せずに、複数の Bounded Context からデータを表示する方法です。複合アプリケーションに関する Udi のポッドキャストを見ました。彼は、Razor セクションを使用して複数の境界付けられたコンテキストからのデータを表示することについて言及していますが、詳細は提供していません。誰かがそれを使用する方法を知っているか、誰かが他の方法を知っていますか?
2 に答える
NHマッピングに関しては、各境界コンテキスト(BC)に独自のマッピングのセットが必要であるため、独自のセッションファクトリが必要です。セッションファクトリインターフェイスを特定のBCに関連付けるには「タグ付け」する必要があり、そのBC内のすべての依存関係も行うため、それぞれのBCに適切なセッションファクトリを解決するようにDIコンテナを構成するのは難しい場合があります。そのタグに関連付ける必要があります。もう1つのオプションは、オープンホストサービス(RESTなど)を作成して各BCをカプセル化し、Webアプリからサービスを参照することです。このようにして、WebアプリケーションでNHマッピングを管理することを心配する必要はありません。
Razor の良い点は、単一ページ (ポータル スタイル) の一部をレンダリングする完全に独立したコントローラーを持つことができることです。たとえば、メインの Razor ビューでは次のようになります。
<some_markup> New products </some_markup>
@{ Html.RenderAction("Get", "NewProducts"); }
<some_markup> Product ratings </some_markup>
@{ Html.RenderAction("Get", "ProductRatings"); }
と は異なる境界コンテキストNewProductsController
にProductRatingsController
属し、次のようになります。
public class NewProductsController {
private readonly IProducts repository;
public NewProductsController(IProducts repository) {
...
}
[ChildActionOnly]
public ViewResult Get() {
// load products from repository and
// return corresponding ViewModel
}
}
public class ProductRatingsController {
private readonly IProductRatings repository;
public ProductRatingsController(IProductRatings repository) {
...
}
[ChildActionOnly]
public ViewResult Get() {
// load product ratings from repository and
// return corresponding ViewModel
}
}
コントローラは同じページにデータを表示しますが、お互いを認識していないことに注意してください。リポジトリは、アプリケーションのコンポジション ルートでDI コンテナーを使用して挿入できます。