2009-06-21 16 views
4

MVCでは、1つのモデルを1つのテーブルまたは1つのモデルをいくつかのテーブルですか?MVCでは、1つのモデル1のテーブルまたは1つのモデルのいくつかのテーブル?

私は3つのテーブルを含むアプリケーションを構築しています。 3つのテーブルすべてに対して1つのモデルを作成するのか、3つのテーブルに対して3つのモデルを作成するのかはわかりません。

3つのモデルを3つのテーブルに使用している場合、これらの3つのテーブルを結合するにはどこにコードを入れる必要がありますか? 3つのモデルのいずれかにコードを挿入しますか?

提案がありますか?

答えて

4

通常、テーブルごとに1つのモデルを作成するので、3つのモデルが必要な場合があります。 私が "モデル"と言うとき、私は、単一の行を(通常は)単一の表に表すクラスを意味します。

例えば: テーブル:

  1. 製品
  2. 注文
  3. 顧客

このような場合には、最も簡単で単純なデータを表す3つの異なるクラスを(作成することですアプリケーションのモデル)。第1クラスは単一の製品を表し、次は注文を表し、最後のクラスは単一の顧客を表します。

+4

私はこれらの3つのテーブルに参加したいのですが、どこにコードを入れるべきですか? – Billy

+0

また、「多対多」の関係がある場合は、通常、モデルによって表されない関係を表す表があります。 –

+0

最も明白な方法は、関連付けられたデータを表すクラスにプロパティを追加することです。 (つまり、 'Customer'クラスには 'Order'という名前のプロパティがあり、これは 'Order'クラスのコレクションになります(これはあなたのためにすべての作業を行うADO.NET Entityフレームワークを使用すると考えられます) – yosig81

5

一般に、MVCの 'Model'部分は、 'Presentation Model'または 'View Model' - つまり、Viewに必要なすべてのデータと動作をカプセル化するクラスとして解釈される必要があります。これは、ドメインモデルと同等であってもなくてもよい。

ドメインモデルは、UIから独立するように設計する必要があります。つまり、そのようなモデルは、特定のボタンが有効かどうかの判断など、UI固有のデータと動作で汚染されるべきではありません。

同じドメインオブジェクトをいくつかの異なるビュー(マスター/ディテール、または表示/編集など)で表示し、それらのビューが十分に異なる場合は、各ビューのビューモデルを有効にすることもできます。

一般に、ドメインレイヤーとプレゼンテーションレイヤーを個別に設計する必要があります。

ドメインレイヤーでは、3つのテーブルを3つのクラスとしてモデル化することができます。 FowlerのPatterns of Enterprise Application ArchitectureとEvansのDomain-Driven Designのような書籍には、リレーショナルデータをドメインモデルとしてモデル化する方法に関する多くのガイダンスが含まれています。

MVCでビューをモデリングする場合、ビューごとに1つのモデルを作成することが最も理にかなっています。このようなビューモデルは、単一のドメインオブジェクトを単純にカプセル化するだけでなく、複数の異なるドメインオブジェクトをカプセル化して集約することもできます。

このようにして、懸念事項を確実に分離し、クラスが単一責任原則に従うようにすることができます。

非常に単純なシナリオでは、ドメインモデルとプレゼンテーションモデルを1つのレイヤーに折り畳むことは意味がありますが、これは本質的にソリューションにドメインモデルがないことを意味するはずです。すべてのモデルは純粋なプレゼンテーションモデル。

+0

これは古い投稿であることを知っています。あなたの投稿を読んだ後、私は様々な種類のモデルを研究しました。どのようにしてドメインモデルをプレゼンテーションモデルから分離する必要があるかについて混乱しています。与えられたビュー? – Klik

+1

@ Klikその質問に1つの答えを与えることは不可能ですこれは、与えられたデザインを実装したいというあなたのモチベーションに依存するからです。別のドメインモデルを使用する場合は、アプリケーションアーキテクチャの階層化に取り組んでおり、それに伴うコストがあります。http://blog.ploeh.dk/2012/02/09/IsLayeringWorththeMapping –

+0

この投稿私が読む必要があるものです、ありがとう! – Klik

関連する問題