MVC層状アプリケーションのビジネス、ドメイン、ビューモデルの正しい定義と設計

StackOverflow https://stackoverflow.com/questions/9374746

質問

C#とRazorにASP.NET MVC3があります。アプリケーションのアーキテクチャは、データアクセスレイヤー(EFクラス +リポジトリ)、サービスレイヤー、コントローラー、ビューモデル、ビューに分割されています。

私のアプリケーションはaです ダッシュボード, 、グラフを使用して、製品に関する統計を表示する必要があります。

私が持っていると仮定します ProductProductCategory テーブルとグラフに、販売の割合を表示する必要があります Products あたり ProductCategory あたり . 。 X軸には月があり、y軸にはパーセンテージがあります ProductPercategory/ProductTotal したがって、私は同じ数の行を持っています ProductCategories.

この場合、私 ドメインモデル によって作られています ProductProductCategory 上のオブジェクト EF. 。私のリポジトリはこれらを与えます ドメインオブジェクト その上層(サービス層)に。

じぶんの 事業の型 によって作られています ProductGraph オブジェクトと私 サービスレイヤー このビジネスオブジェクトは、その上層(コントローラー)に与えます。

私のコントローラーはこれを取ります ProductGraphオブジェクトとそれをにマッピングします モデルを表示します ProductGraphViewModel ビューに表示されます。

モデル間のこの区別は正しいですか?レイヤー間で渡されたオブジェクトの定義に不足や悪いアプローチはありますか?

役に立ちましたか?

解決

私は自分のものをいくつか尋ねてあなたの質問に答えます。

  1. 「ドメインモデル」と「ビジネスモデル」の違いは何ですか?それぞれが他のものよりも多くの価値を与えますか?それ以上知らずに、私はそれらが同じことだと思います。

  2. あなたのサービスレイヤーはどのような利点を与えますか?実際、リポジトリの方法をラップするだけで、人々(私自身を含む)はしばしば「サービスレイヤー」トラップに陥りました。層の消費に対するORMの詳細を漏らし、そもそも抽象化のポイントを打ち負かすことになります。

レイヤー間の例のフローのコードを私たちに与えると、それは役立つかもしれません。

はい、 @sweaver2112はDIの使用についてのスポットです。簡単なセットアップ、最大の利点。

他のヒント

まあ、あなたは私の素人の親指を持っています、これはかなり標準的なようです。考慮すべき他のいくつかのことは次のとおりです。1)あなたのDAL/サービスレイヤーはインターフェースされていますか? 2)依存関係噴射を使用していますか(これらのインターフェイスをコントローラーインスタンス化に渡す)?そうすれば、実装を切り替えるか、単体テストを簡単に模倣できます。

これ ブログ投稿 興味深いかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top