どこのモデルが住んでいる必要がありますか? Web層やデータ層? (MVC + NHibernateの)
-
23-08-2019 - |
質問
私はMVC、Ninject、およびNHibernateは(これらの技術を使用して私の最初)とn層アプリケーションを設定しています。明確さのために、階層は、「データ」ティア、「サービス」ティア、および「ウェブ」ティア(すべてが別々のプロジェクトです)です。
MVCを使用すると、「モデル」フォルダ内にある、あなたのモデルを持っています。強く型付けされたビューを作成するために、ここで私のモデルを置くために、一般的にMVCの哲学に保つことが必要であると考えられます。
マッピングが行われ、NHibernateのは、サービス層に戻るには、実際のオブジェクトをインスタンス化できることをできるように、しかし、NHibernateので、私はまた、「データ」の階層での私のモデルを必要としています。
プロジェクト間のクラスを複製することは非常に乾燥していないと、自分のライブラリーにそれらを抽象化することはMVCと(いずれも練習も哲学に)うまくプレーしていないようです。
任意の考え?どのようにMVCモデル対あなたのO / RMオブジェクトを構築しますか?
解決
私は、データ層のEntity Frameworkのモデル/クラスを維持し、プレゼンテーションモデルとモデルのバインダーのためのMVCプロジェクトのモデルフォルダを使用します。
他のヒント
データモデルは、それが自分のことだです。 MVCにおけるモデルは異なるものです。それはあなたがしたり、データモデルであってもなくてもよい、表示しようとしているもののモデルです。あなたは、データモデルは、レイヤーを超越、あるいはないかもしれませんね。
例えば、標準的なサインアップの形をとります。データモデルは、ユーザ名、パスワード、ログイン履歴クラスの配列、それがアクティブで、多くの他のものです示すフラグを含むことができます。 MVCにおけるモデルは、だけは本当にユーザー名とパスワードを気にし、ユーザーがパスワードを2回入力することがあります。あなたのデータモデルは、実際には2つのパスワードフィールドを必要としていますか?いいえ。しかし、MVCにおけるモデルがありません。したがって、二つの異なる生き物。
私は、理由のNHibernateのデータ層で私のモデルのすべてを保ちます。プレゼンテーションを清潔に保つのに最適な方法は、 S#arpコマンドアーキテクチャのを見てみましょう。モデルは、あなたの意見が強く型付けされるために、物理的にWebプロジェクトに配置する必要はありません。
あなたはここにDRY原則について正しいです。私は私のビジネスオブジェクトから分離され、私のLINQツーSQLオブジェクトを保持し、私はいくつかの重複を持っており、私が良い気分にさせるしませんが、簡単な回避策は、これが存在しないようです..
私は大変な時間、この決定を行うがあったが、MVCのストアフロントを構築しながら、私はロブConeryさんのブログを見て、最終的に私はこの道を行くことにしました(ORMオブジェクトとビジネスオブジェクト)
MVCでは、あなたのモデルを持っています 「モデル」フォルダ内にあります。そうみたいです にここに私のモデルを置くために必要な 強く型付けされたビューを作成し、へ 一般の哲学を保ちます MVCます。
いいえモデルは、あなたが望むものになることはできません。それが必要であったならば、私はまだプレゼンテーションモデルを使用しますが、私はあなたの意見にあなたNHibernateのエンティティを使用することに異論はない。
セッション自体はデータ層であるため、NHibernateはを使用すると、実際にデータ層を必要としません。
サービス層は、有効なアイデアだと思いますが、この層のために、複数のクライアントを持つことを計画している場合にのみます。
そうでなければ、私は私の層を分離するために1つのプロジェクトと使用の名前空間を持っているでしょう。それはより速く構築し、展開が容易になります。