Я разрабатываю приложение, в котором одинаковые объекты находятся в двух местах с разными типами коллекций, как показано ниже.
Модель:
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" не может использоваться с аргументом типа.
Причина, по которой я хочу этого, я хотел свести к минимуму преобразование типов из/в модель и модель представления.
Моя модель просмотра будет такой,
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.