私は大規模なASP.NET MVC 3アプリケーションを数ヶ月間作っています。私のコントローラーが大変であることがわかったのは、プロジェクトの後半になってからでした。これらのコントローラーが巨大であるという問題の一部は、私が単体テストできなかったことでした。ASP.NET MVCソリューションを整理する
私は(私の心の中で)4つのタスクに分割するので、コントローラの責任をしました:
- ナビゲーションデータにIDを変換する
- が
- 一般的な表示のための
- 建物のビューモデルオブジェクト目的ビジネスロジック
一部のビジネスロジックはクライアント側とサーバー側のコードで共有されるため、ビューモデルビルダーロジックと混合するのは意味がありません。そこで、私はすぐに少なくとも2つのプロジェクト、すなわちビューモデルビルダーと汎用ビジネスロジックの必要性を見ています。
私はナビゲーションがMVCプロジェクトにとどまるようにコントローラの責任でなければならないことを認識しました。
IDをデータオブジェクトに変換するのは、どのプロジェクトが責任を負わなければならないのでしょうか。もともと、私はこれをビジネスクラス/ビューモデルビルダークラスの責任者にしていました。しかし、私はこれらのクラスが完全に構築されたオブジェクトでプライマリで動作することを望んでいると思います。だから、コード内でどこでこの変換が行われるべきかわかりません。私がどこで変換を行うかは問題ではないようですが、コードは重複してしまいます。私はこれらの変換を行うそれぞれのプロジェクトでアダプターを作成し、実際のビジネスクラス/ビューモデルビルダークラスを呼び出すことを考えていました。
- 誰かが1つのプロジェクトを超えて成長したASP.NET MVCプロジェクトで働いたことはありますか?
- コントローラのサイズを小さくしてコードをテスト可能に保つために、ロジックをどのように分割するのですか?
ModelBindersを使用してキーをオブジェクトに変換する方法についての議論が好きでした。 AutoMapperを使用すると、ロジックが複雑になったときに故障が始まると思います。このために、私はビュー・モデル・ビルダーの作成について考えています。 POSTハンドラのロジックがより複雑になると、このデモで使用されるIHandlerクラスは元のコントローラほど厄介になり始めます。不快なビジネス検証ロジックには、ModelStateの更新も含まれます。 –
このデモの良い点は、最新のアプローチが正しい方向に動いていることを確認することです。私のコントローラーの行動のほとんどは数行に及ぶ。私は多くのActionFilters、Ninject、ビジネスロジック層を使って自分のアクションサイズを減らしています。私は同じ再発のテーマを見たようです。私は一人ではありません! –
リンクされた動画は存在しません。 –