現在、ドメイン オブジェクトをビューに渡し、POST からそれらに直接バインドしています。誰もがこれは悪いと言うので、ViewModel の概念を追加しようとしています。
ただし、これを非常にエレガントに行う方法を見つけることができません。非常に面倒なコントローラーアクションで終わらないための他の人の解決策を知りたいです。
たとえば、「人を追加」機能の典型的なプロセスは次のようになります。
- 空の Person ビューモデルを表すビューの GET リクエストを作成する
- ポストバック (イン) 有効なデータ
- コントローラーは、投稿されたデータを人物ビューモデルにバインドします
- バインディングが失敗した場合、(1) と同じアクションを実行する必要がありますが、空のオブジェクトではなく、いくつかのデータを使用してエラーを発生させます。
- バインディングが成功した場合は、プロパティを VM から実際のモデルにマップする必要があります
- モデルを検証する
- 検証に合格した場合: 個人を保存し、コミットし、ユーザーの詳細をディスプレイ VM にマップして、ビューに返します。
- 検証が失敗した場合は、(1) と同じアクションを実行しますが、いくつかのデータとエラーがあります
これらすべてをコントローラー アクションで実行する (GET を無視する) ことは、確かに SRP や DRY ではありません。
このプロセスを分割して、SRP に準拠し、クリーンでモジュール化され、何よりもテスト可能になる方法を考えようとしています。
これに対する人々の解決策は何ですか?
カスタムコントローラーアクションインボーカーを使用して、懸念を個々のメソッド、スマートモデルバインダー、および単純なブルートフォースに分離することを試してきましたが、満足のいく解決策にまだ出会っていません。
PSそれは非常に複雑になるので、なぜ私が気にする必要があるのか を納得させてください