По моему опыту, Model
объекты не должны (и, вероятно, не должны) знать, что они создаются в View
.Часто Model
объекты - это объекты, которым никогда не разрешается находиться в недопустимом состоянии .ViewModel
объекты - это вещи, которые создают Model
объекты.
Итак, поскольку вы никогда не хотите создавать человека очень старого или очень молодого возраста, и каждому человеку нужно имя, ваше Person
класс может выглядеть следующим образом:
public class Person {
public int Age { get; private set; }
public string Name { get; private set; }
public Person(int age, string name) {
if (age < 0 || age > 150) throw new ArgumentOutOfRangeException();
if (string.IsNullOrEmpty(name)) throw new ArgumentNullException();
Age = age;
Name = name;
}
}
А ваш PersonViewModel
может выглядеть следующим образом: *
class PersonViewModel : INotifyPropertyChanged {
private int _Age;
private int _Name;
public int Age {
get { return _Age; }
set {
if (_Age.Equals(value)) return;
_Age = value;
RaisePropertyChanged("Age");
}
}
public string Name {
get { return _Name; }
set {
if (_Name.Equals(value)) return;
_Name = value;
RaisePropertyChanged("Name");
}
}
public Person CreatePerson() {
return new Person(_Age, _Name);
}
}
Затем вы можете поместить любые значения в свой PersonViewModel
, не беспокоясьо создании недопустимого объекта Person
.Вы также можете реализовать проверку в PersonViewModel
, которая может быть более строгой, чем проверка в классе Person
(например, ограничение возрастного диапазона для взрослых старше 18 лет (см. IDataErrorInfo )).