私はおそらくここで分析しすぎていますが、MVCで行ったすべての読み物を見ると、物事のやり方について非常に多くの意見があるようです。
MVCの各部分の責任を定義する「ベストプラクティス」サイトまたはドキュメントはありますか?
私が持っているいくつかの質問は、私がEF / Repository&UnitOfWork /Serviceパターンを使用していることを覚えておいてください:
1)ドメインオブジェクトとビジネスルールの検証結果(エラーメッセージなど)をサービスレイヤーからビューモデルに取得するにはどうすればよいですか?
2)ドメインオブジェクトとすべてのビジネスロジックを実行するサービスレイヤーを使用している場合、ドメインオブジェクトをコントローラーに送信し、(AutoMapperを介して)ビューのビューモデルに変換します。コントローラーの責任は他にどのようなものですか?次のコードは大丈夫ですか?これはコントローラーのロジックが多すぎますか?:
public ActionResult SomeAction()
{
var model = Mapper.Map<DomainObject, ViewModel>(service.QueryReposForData());
model.SomeCollectionForSelectList = Mapper.Map<IEnumerable<DomainObject>, IEnumerable<ViewModel>>(service.QueryReposForSelectListData());
return View(model);
}
コントローラ内の唯一のものは、ビューモデルにマップされたオブジェクトグラフを含むビューを返す1本の線ではないと思いますか?
3)ViewModelsにプロパティを設定して、たとえば何かを非表示にできるかどうかをビューに示してから、ビューでそのロジックを実行しても問題ないと思いますか?例:
@if(Model.DisplaySomething)
{
<div>Something to show</div>
}
else
{
<div>Something else to show</div>
}
TransactionResult
4)トランザクションを処理するのはサービスの責任になるように、サービスが書き込み時にある種のオブジェクトをコントローラーに返すようにすることを考えていました。したがって、トランザクション(UnitOfWork)を開始して必要な処理を実行し、TransactionResult
エラーメッセージが表示される可能性のあるこれを返す集約サービスがありますか?コントローラーにトランザクションの管理を任せる必要はないと思いますが、ドメインオブジェクトにマップされたビューモデルをサービスに渡して、それに基づいて動作させるだけですか?
5)また、どのくらいのActionFilterを使用しますか?これが大きな拡張ポイントであることは知っていますが、モデル作成のすべてをフィルターに詰め込もうとしていることに気付くことがよくあります。