私が見つける問題は、チュートリアルの読み込みのシンプルさと使いやすさの賛成でMVCのためのベストプラクティスを使用していない例がたくさんあります。だから、私は難しい方法を見つけ出し、それが私のために働くことのいくつかを概説します。
あなたのコントローラは、ビジネスロジックとビューの間のデータ転送オブジェクト(DTO)として機能するViewModelsを介して情報を処理する責任を負います。私はコントローラにビジネスロジックを持たず、代わりに独自の責任のグループを扱うように設計された一連のサービスクラスを選択します(IoCは、サービスが持つ可能性のあるほとんどの懸念事項を処理します)。 これは、ビジネスロジックDRYを維持し、サイトのモバイル版を後で作成することを決定したり、公開WebService/APIをデータに公開したりする場合に便利です。
ビューは、ビューごとに具体的に使用されるViewModelsを使用する必要があります。これらのビューは、プリミティブ型または他のビューモデルでのみ構成する必要があります。 ORMのデータエンティティを直接使用することはありませんが、正直なところ私は自分のルールを破ることが知られていますが、これは情報を表示するビューには当てはまりますが、通常は後で支払います。データモデルに課せられた検証ルールは、フォームには必ずしも適用されません。エンティティに読み込まれたデータは、ビューにも関係しない可能性があります。 Lazy Loading複雑なデータエンティティをサポートするORMは、MVCで使用できる便利なサードパーティ製ライブラリー(MiniProfilerおよびGlimpseなど)と混乱を招く可能性があります。後でポストするためのフォームでこれらのオブジェクトをレンダリングする際には、したがって、可能であればフラットViewModelsに固執しようとします。
私は、通常、私のViewModelsの用途に応じて名前を付けます。私の登録ページにはAccountsRegisterViewModel
というモデルが使われるかもしれません。しかし、私がポストバックするときは、普通はAccountsRegisterFormModel
という別のモデルを使用します。これは、ビューにレンダリングするために渡す必要のある情報が何回もあるためですが、ポストバックを受け入れるアクションについては、実際には気にしません(ほとんどの場合はそれが気になりません)。また、MVCでは、さまざまなパラメータを使用して同じ名前を使用するアクションを明確にする必要があるため、さまざまなビューモデルを使用すると、そこで役立ちます。たとえば、CreateAccount()
はアカウント作成ページを表示し、CreateAccount()
はフォームからの投稿を受け入れます。明示的に各フォームの投稿場所を変更することはできますが、MVCの主な焦点は構成オーバーの慣習なので、フォームの投稿先を変更しないようにします。
関連情報(ゴールドバランス)を表示する具体的な例では、独自のデータアクセスを担当する独自のビューを持つチャイルドアクションを作成する可能性があります。 ajaxに手を差し伸べると、バランスがJSONを返すパブリックアクションを呼び出すsmiple部分ビューで処理されるようになります。
これはこれまで私が働いていたことがわかっている習慣です。
ありがとう、私はそれらを見てみましょう。 – Alex