MVC層状アプリケーションのビジネス、ドメイン、ビューモデルの正しい定義と設計
-
28-10-2019 - |
質問
C#とRazorにASP.NET MVC3があります。アプリケーションのアーキテクチャは、データアクセスレイヤー(EFクラス +リポジトリ)、サービスレイヤー、コントローラー、ビューモデル、ビューに分割されています。
私のアプリケーションはaです ダッシュボード, 、グラフを使用して、製品に関する統計を表示する必要があります。
私が持っていると仮定します Product
と ProductCategory
テーブルとグラフに、販売の割合を表示する必要があります Products
あたり ProductCategory
あたり 月. 。 X軸には月があり、y軸にはパーセンテージがあります ProductPercategory/ProductTotal したがって、私は同じ数の行を持っています ProductCategories
.
この場合、私 ドメインモデル によって作られています Product
と ProductCategory
上のオブジェクト EF. 。私のリポジトリはこれらを与えます ドメインオブジェクト その上層(サービス層)に。
じぶんの 事業の型 によって作られています ProductGraph
オブジェクトと私 サービスレイヤー このビジネスオブジェクトは、その上層(コントローラー)に与えます。
私のコントローラーはこれを取ります ProductGraph
オブジェクトとそれをにマッピングします モデルを表示します ProductGraphViewModel
ビューに表示されます。
モデル間のこの区別は正しいですか?レイヤー間で渡されたオブジェクトの定義に不足や悪いアプローチはありますか?
解決
私は自分のものをいくつか尋ねてあなたの質問に答えます。
「ドメインモデル」と「ビジネスモデル」の違いは何ですか?それぞれが他のものよりも多くの価値を与えますか?それ以上知らずに、私はそれらが同じことだと思います。
あなたのサービスレイヤーはどのような利点を与えますか?実際、リポジトリの方法をラップするだけで、人々(私自身を含む)はしばしば「サービスレイヤー」トラップに陥りました。層の消費に対するORMの詳細を漏らし、そもそも抽象化のポイントを打ち負かすことになります。
レイヤー間の例のフローのコードを私たちに与えると、それは役立つかもしれません。
はい、 @sweaver2112はDIの使用についてのスポットです。簡単なセットアップ、最大の利点。
他のヒント
まあ、あなたは私の素人の親指を持っています、これはかなり標準的なようです。考慮すべき他のいくつかのことは次のとおりです。1)あなたのDAL/サービスレイヤーはインターフェースされていますか? 2)依存関係噴射を使用していますか(これらのインターフェイスをコントローラーインスタンス化に渡す)?そうすれば、実装を切り替えるか、単体テストを簡単に模倣できます。
これ ブログ投稿 興味深いかもしれません。