0

コントローラー、ビュー、およびコアで使用できるビューモデルがあります。コアは別のプロジェクトですが、コントローラーとビューは Web プロジェクトにあります。ViewModel を配置するのに最適な場所はどこですか?それは Web プロジェクトにありますか、それとも Core にありますか?それとも View Model 専用の別のプロジェクトを作成する必要がありますか?

4

3 に答える 3

1

Controllers、View、およびCoreで使用できるビューモデルがあります。

いいえ。コアでは使用していません。Google「関心の分離」。ビューモデルの責任は、ビューでモデル(コアプロジェクト)を表すことです。他の目的には使用しないでください。ビューモデルについてここに書いています:http://blog.gauffin.org/2011/07/three-reasons-to-why-you-should-use-view-models/

モデル(コアプロジェクト)からすべてを取得し、適切なビューモデルを作成するのは、コントローラーの責任です。

ビューモデルをコアで使用できるように配置すると、変更する理由が複数あり、単一責任の原則(5つのSOLID原則の1つ)が破られます。つまり、アプリケーションのいくつかの部分は、行うすべての変更の影響を受け、小さな回避策や迅速な修正につながる可能性があり、1年後にはメンテナンスの悪夢になります。

アップデート

AutoMapperの使用例:

public class FlairController
{
    public FlairController(IYourServiceOrRepository repos)
    {
    }

    public ActionResult Details(int id)
    {
        SomeCoreObject entity = _repos.Get(id);
        FlairViewModel model = new FlairViewModel();
        Mapper.Map(entity, model);
        return View(model);
    }
}

サンプルコード(コメント内)は、マッピングフレームワークがない場合のメソッドの外観です。

于 2012-04-24T05:52:56.823 に答える
0

ビュー モデルは通常、UI 形式のデータを持つモデルのラッパーです。おそらく、モデル クラスをコア プロジェクトに、ビュー モデル クラスを Web プロジェクトに保持する必要があります。

View Model クラスのコンストラクターは、モデル クラスのインスタンス (およびビューを設定するために必要なその他のオブジェクト) を受け取り、適切なビュー データを生成できます。たとえば、モデルに DateTime オブジェクトがある場合、ビュー モデルには、表示する形式の DateTime を含む対応する String プロパティを含めることができます。

于 2012-04-24T03:23:24.517 に答える
0

ViewModel はビューに固有のものであるため、通常は UI プロジェクトの下に ViewModel フォルダーを作成し、そこに保持します。

ここに画像の説明を入力

ViewModel とエンティティ モデルの間でデータをブリッジするために、別のサービス レイヤー (別のプロジェクト) を作成します。私のコントローラー アクション メソッドは、ViewModel オブジェクトを使用してサービス レイヤーを呼び出します。

于 2012-04-24T03:27:43.860 に答える