Предположим, что требуется создать дочернее окно и обработать результат из некоторой модели.Каковы недостатки использования кода для обработки дочерних окон в MVVM?
Для этого мы можем использовать код позади.
Пример:
// Code Behind
class SampleView : ISampleView
{
public void CreateChildWindow(params string [] args)
{
var childWIndow = ChildViewFactory.Create(args);
childWindow.Closed +=
() => {
if(childWindow.Result)
{
this.ViewModel.DoSomething();
}
else
{
this.ViewModel.DoSomethingElse();
}
};
childWindow.Show();
}
}
// ViewModel
class SampleViewModel
{
private void OnSomeCommandHandler()
{
((ISampleView)this.View).CreateChildWindow(new []{""});
}
public void DoSomething()
{
}
public void DoSomethingElse()
{
}
}
Я не видел этот подход в любом месте, однако это представляется весьма логичным.
С тех пор я задавался вопросом - каковы возможные недостатки с использованием этого шаблона?
зависит от того, что является вашим «childWindow.Result». Прямо сейчас, если проверка свойства 'Result' не тестируется в представлении. Если он находится в виртуальной машине, и вы используете шаблон мессенджера/события-агрегатора, вы можете сохранить тестируемую UI-логику, а также умело имитировать их в модульных тестах без потери покрытия кода в тестах. Открытие/закрытие окон с помощью кода-кода совершенно справедливо, очень легко переусердствовать и стрелять в ногу, поэтому некоторые предостережения никогда не могут быть слишком плохими. – Viv