Используя контекст Models
и View Models
из MVVM
, как мне справиться с этой ситуацией?
У меня есть два абстрактных класса, которые будут основой всех моделей и моделей представлений вмоя программа;BaseModel
и BaseViewModel
.
Они выглядят следующим образом.
public abstract class BaseModel {
public string Name { get; set; }
}
public abstract class BaseViewModel {
protected readonly BaseModel baseModel;
public BaseViewModel(BaseModel baseModel) {
this.baseModel = baseModel;
}
public string Name {
get => baseModel.Name;
set {
baseModel.Name = value;
}
}
}
У меня также есть эти два класса, которые будутиспользуется с определенным видом в моей программе;UseableModel
и UseableViewModel
.
Они выглядят следующим образом.
public class UseableModel : BaseModel {
public string NewVar { get; set; }
}
public class UseableViewModel : BaseViewModel {
public UseableViewModel(UseableModel model) : base(model) { }
public string NewVar {
get => baseModel.NewVar;
set {
baseModel.NewVar = value;
}
}
}
Проблема в том, что это, очевидно, не будет работатьпоскольку UseableViewModel.NewVar
пытается сделать ссылку на свойство, которое не существует в BaseModel
.
Каков наилучший способ разрешить каждой модели представления сохранять поведение, определенное в BaseViewModel
, но использоватьего собственная модель, расширенная с BaseModel
?
Потенциальные решения
Существует несколько потенциальных решений, таких как запись свойства Name
в каждом представлениимодели, но это может быть многократным дублированием в зависимости от того, сколько моделей представления было.
Вы также можете определить отдельную модель в модели представления, например
//...
private readonly UseableModel model;
public UseableViewModel(UseableModel model) : base(model)
{
this.model = model
}
//...
Но естьПроблема дублирования наборов данных и траты пространства, а также наличия противоречивых данных между двумя моделями.
Так есть ли способ избежать дублирования определений методов и избежать проблемы, описанной непосредственно выше?