は、この質問に対する答えは主観と意見ベースの両方のある程度です。あなたのビューはModel.ProductViewModel
を介してデータにアクセスする - それは、それが効果的にいくつかのProductViewModel
の種類とClientViewModel
プロパティで構成することになる(あなたのHomeIndexViewModel
なるものを返すようにProduct
とClient
関連のメソッドを呼び出すためにHomeController
の罰金..です
を言われています、Model.ClientViewModel
など)。
さらに進んで、HomeController
のIndex
アクションで要求される要求とアプリケーションのロジックを処理するオーケストレーションコンポーネントを追加します。これはコントローラを薄くし、バックエンドから切り離す必要があります。
public class HomeController : Controller
{
private readonly IOrchestrator orchestrator;
public HomeController() : this(IOrchestrator orchestrator)
{
}
public HomeController(IOrchestrator orchestrator)
{
this.orchestrator = orchestrator;
}
public async Task<ActionResult> Index()
{
var homeIndexViewModel = await orchestrator.GetHomeProductsAndClientsAsync();
return View(homeIndexViewModel);
}
}
GetHomeProductsAndClientsAsync()
明らかHomeIndexViewModel
を返すために、アプリケーションロジックを処理しますあなたのFooOrchestrator
クラスのメソッドになります。
オーケストレータは、依存性注入を容易にする(IOrchestrator
インターフェースを実装するIOrchestrator
はなく、FooOrchestrator
クラス)インタフェースとしてHomeController
に渡され(ただし、私見は、アプローチが依然としてDIなしで有益です)。
一部読み取り:[ASP MVC 3つのビューに2つのモデル]の
"Never Mind the Controller, Here is the Orchestrator"
(ディノエスポジト)
可能な重複(https://stackoverflow.com/questions/5550627/ 2つのモデルの1つのビューin-asp-mvc-3) –