2011-01-04 13 views
2

私はMVCには新しく、モデルを設計する方法を探しています。asp.mvcモデルデザイン

私は、MVC Webサイトプロジェクトと、データアクセスを処理し、ビジネスオブジェクトを構築する別のクラスライブラリを持っています。

ビジネスオブジェクトであるProjectという名前のクラスがあり、すべてのプロジェクトをビューに表示する必要がある場合、別のモデルクラスのプロジェクトを作成する必要がありますか?この場合、クラスは同一になります。 新しいモデルクラスから何かを得ることができますか? 私は別のdllからのオブジェクトへの参照の参照を持っているのが好きではありません...しかし、私はコードの複製も好きではありません。

同じ問題が発生しましたか?

答えて

3

通常、ビューがデータストア内の実際のクラスにマップされているかどうかによって、モデルには既存クラスとカスタムクラスの組み合わせが使用されます。純粋な無駄なページでは、データクラスをモデルとして使用するのが完璧です。実際には、通常はいくつかのデータが必要になります。基本的には、実際に終了し、むしろ何よりも、特定のフォームからアクションパラメータに対応する - 私はそれらを結合する最も簡単な方法を見つける

// the class from the data store 
public class MyDataObject { 
    public string Property1 {get;set;} 
    public string Property2 {get;set;} 
    } 

// model class in the MVC Models folder 
public class MyDataObjectModel { 
    public MyDataObject MyDataObject {get;set;} 
    // list of values to populate a dropdown for Property2 
    public List<string> Property2Values {get;set;} 
    // related value fetched from a different data store 
    public string Property3 {get;set;} 
    } 

のようなものは、私はまた、フォームフィールドの単なる集合でかなりの数のモデルクラスを持っていますデータベースに格納されます。

2

同じプロジェクトの場合は、明らかにProjectクラスを複製する必要はありません。ビュー内でそのまま使用してください。しかし実際の生活では、ビューに特定の要件があり、MVCアプリケーションでビューモデルクラスを定義することをお勧めします。コントローラは、モデルクラスとビューモデルの間をマップし、ビューに渡します。

1

あなたはこれについて異なる意見を見つけるでしょう。私はあなたに私を与えます:

私は、デフォルトでは、オブジェクトを再利用する傾向があります。ビューのニーズが変化し、ビジネスオブジェクトのデータのほとんどまたはすべてを必要としなくなったら、別のビューを作成します。ビュー自体に合わせてビジネスオブジェクトを変更することは決してありません。

ビジネスオブジェクトの情報のほとんどまたはすべてが必要で、追加データが必要な場合は、ビジネスオブジェクトへの参照を保持するビューを作成し、必要な追加データポイントのプロパティも作成します。

ビジネスオブジェクトを再利用するメリットの1つは、使用しているデータアクセステクノロジによっては、検証から再利用できることです。 isntanceのために、Entity Frameworkに結合されたASP.NET MVC 3は、両方とも有効性確認のために名前空間System.ComponentModelの属性を使用するので、いいです。

1

これは、モデルが何を意味するかによって異なります。私が通常使用するアーキテクチャーでは、別のクラス・ライブラリーにあるクラスのコレクションである私のドメイン・モデルを持っています。 DataAnnotationsを使用して、保存時にモデルを自動的に検証する検証機能を組み込みました。

次にMVCプロジェクトに配置するViewモデルがあります。ビューモデルは、ビューに関連する情報のみを保持します。 MVCが検証のために自動的に使用するので、私はここでもデータ注釈を使用します。

このようにモデルを分割する理由は、ビュー内のすべてのドメインモデルを必ずしも使用するとは限らないためです。つまり、バックエンドのデータを再構築するか、隠しフィールドに隠しておく必要があります。私が好きなものでもありません。

関連する問題