Существует ли передовая практика или общепринятый способ структурирования и проверки данных с использованием MVVM в сочетании со службами RIA в Silverlight?
Вот суть моей проблемы.Допустим, у меня есть EmployeeView, EmployeeViewModel и некоторая сущность Employee.В обычных приложениях RIA я выставлю эту сущность Employee в представлении и получу проверку «бесплатно», потому что сущности реализуют INotifyDataErrorInfo и IDataErrorInfo (правильно?).
Теперь, если я хочу выставить некоторые свойства Employee черезViewModel, а не напрямую через Entity, тогда это становится более сложным.Я мог бы выставить нужные мне биты и подключить их к сущности на бэкенде, например:
private Employee _employee;
public EmployeeViewModel()
{
_employee = new Employee();
}
public string Name
{
get { return _employee.Name; }
set
{
_employee.Name = value;
// fire property change, etc.
}
}
... но я потерял вкусную «бесплатную» проверку сущностей.В противном случае я мог бы выставить сущность непосредственно в модели представления, например, так:
private Employee _employee;
public Employee Employee
{
get { return _employee; }
}
public EmployeeViewModel()
{
_employee = new Employee();
}
В этом случае представление будет привязываться непосредственно к сущности Employee и находить там его свойства, например:
<StackPanel DataContext="{Binding Employee}">
<TextBox Text="{Binding Name}" />
</StackPanel>
Используя этот метод, мы получаем «бесплатную» проверку, но это не совсем чистая реализация MVVM.
Третий вариант - реализовать INotifyDataErrorInfo и IDataErrorInfo самостоятельно в виртуальных машинах, но это кажетсякак ужасно много сланцевого кода, учитывая, как легко было бы мне использовать вышеупомянутое решение и получить что-то чуть менее «чистое», но чертовски намного проще в конце дня.
ТакНаверное, мой вопрос: какой из этих подходов подходит в какой ситуации?Есть ли лучший подход, который мне не хватает?
В случае, если это уместно, я смотрю на структуру Caliburn.Micro MVVM, но мне было бы интересно увидеть ответы, которые применимы в общем.