私は類似のエンティティが次のように異なるタイプのコレクションを持つ2つの場所にあるアプリケーションを設計しています。汎用インターフェイス
モデル:
class PersonModel {
public string Name { get;set;}
public List<Address> Addresses { get;}
public List<OtherType> OtherTypes { get;}
}
同様のビューモデル:
:class PersonViewModel {
public string Name { get;set;}
public ObservableCollection<Address> Addresses { get; }
public ObservableCollection<OtherType> OtherTypes { get; }
}
は、私は両方保証するすべてのプロパティを実装する一般的なインタフェースを使用すると思ったので、私はこのようなものを作成し、両方のエンティティの一貫性を保つために
public interface IPerson<T> where T: ICollection<T> {
string Name { get;set;}
T<Address> Addresses { get;}
T<OtherType> OtherTypes [ get; }
}
であり、クラスは
class PersonModel<List> {}
class personViewModel<ObservableCollection> {}
しかし、コンパイラは自分のインタフェースをコンパイルできません。 :( は言う、タイプパラメータ「T」は型引数で使用することはできません。私はこれをしたい理由
理由は、私が&のViewModelをモデル化するために/からの型変換を最小限にしたかった。
私のViewModelには次のように
になりますこの、class PersonViewModel<T> : IPerson<T> {
public PersonViewModel(IPerson model){
this.Model = model;
}
internal PersonModel Entity {
get; set;
}
public string Name {
get{ return model.Name;}
set {model.Name = value;}
}
public T<Address> Addresses {
get { return model.Addresses.Cast<T>(); }
}
}
は私の同期モデル&のViewModelを持つためのより良い方法を提案する。ViewModelには、ビューのためのデータを提供するために存在
恐らく、Automapperを代わりに使用してください。 – CodesInChaos
私はすでにそれを使用していますが、チームメンバーは大きくてネストされたエンティティのためにそれを好きではありません – hungryMind