最初に哲学を理解しようとして、ASP.NET MVC を始めたばかりです。コントローラーとビューが果たす役割についてはかなり明確だと思いますが、モデルの部分については少し混乱しています。ドメイン モデル、データ モデル、ビューにバインドされたオブジェクトと言うソースもあります。
IMHOこれらは非常に異なるものです。それで、誰かがこれを一度だけ片付けてくれませんか?
最初に哲学を理解しようとして、ASP.NET MVC を始めたばかりです。コントローラーとビューが果たす役割についてはかなり明確だと思いますが、モデルの部分については少し混乱しています。ドメイン モデル、データ モデル、ビューにバインドされたオブジェクトと言うソースもあります。
IMHOこれらは非常に異なるものです。それで、誰かがこれを一度だけ片付けてくれませんか?
モデルは、「アプリケーションが動作する情報のドメイン固有の表現」です。それは MVC パターンが考えるよりも低いレベルであるため、単なるデータ モデルではありませんが、(たとえば) データをカプセル化し、それらに対して処理を実行できるようにするのはクラスです。
MS の Scott Guthrie は、彼の発表でこの定義を使用しています。
MVC ベースのアプリケーションの「モデル」は、状態の維持を担当するアプリケーションのコンポーネントです。多くの場合、この状態はデータベース内に永続化されます (たとえば、SQL 内の Products テーブルからの注文データを表すために使用される Product クラスがある場合があります)。
参考文献:
私は実際に物事を明確にするために追加のレイヤーを追加するのが好きです。基本的に、「モデル」はドメイン固有のものであり、それ自体を永続化する方法を知っています(永続化がドメインの一部であると想定しています)。
IMO、私が参照したもう1つのレイヤーはViewModelと呼ばれます...ビューに渡される「モデル」は実際にはドメインとは関係ありません...検証情報、ユーザー表示情報、ビューに表示するためのルックアップリスト値。
私はそれがあなたが持っている切断だと思います:-)
彼らがそれがドメインモデルであると言うとき、あなたのアドバイスの情報源は正しいです。多くの場合、データモデルも非常に緊密に連携します。
ドメインモデルとデータモデルが異なるのは、データモデルの形式が比較的静的である(コンテンツではない)のに対し、ドメインモデルはドメインの特定の制約とルールを追加することです。たとえば、私のデータモデル(データベース)では、血圧をsmallints(収縮期および拡張期)として表します。私のドメインモデルには、2つの測定値のそれぞれの値を保持し、許容値の範囲に追加の制限を課す「血圧測定値」オブジェクトがあります(たとえば、収縮期の範囲はsmallintの範囲よりもはるかに小さい)。また、これらの値に関する定性的な判断を追加します(150/90のBPは「高」です)。
問題のあるドメインのこれらの側面を追加することで、ドメインモデルは単なるデータモデル以上のものになります。一部のドメイン(たとえば、完全なオブジェクト指向データモデルでより適切にレンダリングされ、リレーショナルモデルへのマッピングが不十分なドメイン)では、2つが非常に大きく異なることがわかります。ただし、私が作成したすべてのシステムは、非常に高度なオーバーラップを備えています。実際、ストアドプロシージャ、ユーザー定義型などを介して、かなりの数のドメイン制約をデータモデル自体にプッシュすることがよくあります。
これをステップバイステップのチュートリアルで見る必要があります。
いずれかの章から:26ページ
モデルビューコントローラーフレームワークでは、「モデル」という用語は、アプリケーションのデータを表すオブジェクトと、検証およびビジネスルールを統合する対応するドメインロジックを指します。このモデルは、多くの点でMVCベースのアプリケーションの「心臓部」であり、後で説明するように、基本的にその動作を駆動します。
その有用性を願っています。
たとえば、原子力発電所の運転を管理するためのWebサイトを構築している場合、モデルは原子力発電所のモデルであり、現在の運転パラメータ(温度など)のプロパティ、開始/停止の方法を備えています。発電など。うーん...この場合、モデルは実際には実際のプラントと分離モードの投影ですが、あなたはその考えを理解しました。