次のように、類似したエンティティが異なるタイプのコレクションを持つ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」は型引数と一緒に使用することはできません。
これが必要な理由、/からmodel&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>(); }
}
}
ModelとViewModelを同期させるためのより良い方法を提案してください。