2011-12-15 6 views
1

単一のモデルから派生した複数のビューモデルを持つ最良の方法は不明です。単一のモデルから派生した複数のMVC ViewModels

モデルには現在データアノテーションがありますが、抽象レイヤーとしてのビューモデルの柔軟性があり、必要に応じて異なるアノテーションを持つモデル属性を柔軟に使用することができます。

私は、データアノテーションを持つビューモデルを指し示すMetadataType属性を持つ基本モデルを宣言していますが、1:M(1モデル:M viewmodels)が必要なときには1:1の関係になります。

現在のところマッパーを使用しておらず、マッパーを脇に置いておらず、単一のモデルを表すデータアノテーションを含むビューモデルを手動で作成するにはどうすればよいでしょうか。おそらくビューモデルをモデルクラスから派生させ、モデルデータアノテーションを削除してから、モデルをミラーリングするビューモデルでプロパティを作成します(ただし、モデルプロパティをシャドーするのと同じ名前ではありません)。このよう...

[DisplayName("Version Number")] 
    [StringLength(30)] 
    public double VMVersionNumber 
    { 
     get { 
      return VersionNumber; // VersionNumber is model property 
     } 
     set { 
      value = VersionNumber; 
     } 
    } 

としてビューモデル財産上のデータ注釈おかげ

答えて

1

は、組成物は、継承よりも良い仕事ではないでしょうか?

public class ModelUser 
{ 
    [StringLength(30)] 
    public string FirstName { get; set; } 

    [StringLength(30)] 
    public string LastName { get; set; } 
} 

public class ViewModelForSomeView 
{ 
    public ModelUser MyUser { get; set; } 
    public string OtherPropertyNecessaryForThisView { get; set; } 
    public string AnotherPropertyNecessaryForThisView { get; set; } 
} 
+0

「ユーザ」タイプの定義はどこですか?これはViewModelの目的を無効にするものではありません。(ModelUser'オブジェクトに設定されたプロパティを持つことを意図していたと思います)、これはModelクラスをまったく調整しません。 –

+3

申し訳ありませんが、編集したコードを少し明確に... モデルの目標は、ビジネスオブジェクトをモデル化することです。ビューモデルの目的は、あるページのすべてのデータを1つのオブジェクトに集めることです。これは簡単に構成で実現できます。他の何かのためにあなたのビューモデルを使用しようとしていますか? – Shlomo

+0

構図は私がViewModelsのために今使っているものですが、これはモデルにデータ注釈を追加すると(必要と言えば)、構図viewmodelでそれを使用する各ビューは必要に応じてそのフィールドを扱わなければならない。ビューの要件に基づいてデータの使用が異なるため、ほとんどのデータ注釈をビューモデルに追加することが望ましいでしょう。継承は私の見解ではより疎結合しており、ビューのニーズに基づいてさまざまな方法で同じデータを使用できます。 – user1100352

関連する問題