2013-09-11 7 views
0

Предположим, что требуется создать дочернее окно и обработать результат из некоторой модели.Каковы недостатки использования кода для обработки дочерних окон в 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() 
    { 

    } 
} 

Я не видел этот подход в любом месте, однако это представляется весьма логичным.

С тех пор я задавался вопросом - каковы возможные недостатки с использованием этого шаблона?

+1

зависит от того, что является вашим «childWindow.Result». Прямо сейчас, если проверка свойства 'Result' не тестируется в представлении. Если он находится в виртуальной машине, и вы используете шаблон мессенджера/события-агрегатора, вы можете сохранить тестируемую UI-логику, а также умело имитировать их в модульных тестах без потери покрытия кода в тестах. Открытие/закрытие окон с помощью кода-кода совершенно справедливо, очень легко переусердствовать и стрелять в ногу, поэтому некоторые предостережения никогда не могут быть слишком плохими. – Viv

ответ

1

Здесь вы задали довольно субъективный вопрос. Разработчики Hardcore MVVM могут сказать, что вы должны никогда не использовать код, за исключением файлов, в то время как другие могут сказать, что это полностью нормально.

Основная причина разделения кода из представлений - разрешить код кода модели, который будет легко протестирован с помощью классных классов доступа к данным. Некоторые люди скажут вам, что это разделение также позволяет нам менять разные взгляды на один и тот же контент, но мне никогда не приходилось это делать.

Я уверен, что вы найдете людей, которые говорят, что вы должны никогда не открыть представление из модели просмотра - чтобы модель представления ничего не знала о представлениях. Эти люди использовали бы какой-то слой обслуживания для запуска представлений (косвенно) из моделей представлений. Другие расскажут вам, что запуск дочерних представлений из исходного кода просмотра - это именно то, что вы должны делать.

В конце концов, это действительно личное решение о том, что подходит вам и приложению, которое вы разрабатываете. Поскольку мы обычно тестируем модели просмотра, а не виды (да, я знаю автоматическое тестирование пользовательского интерфейса в WPF), я бы сказал, что единственной причиной отказа от использования кода представления является то, что этот код не будет проверен (по крайней мере, в нормальный путь вместе с кодом модели представления).

Однако нам действительно нужно проверить простой код, запускающий дочернее окно? На мой взгляд, мы не ... Microsoft уже проверила это для нас. Поэтому, чтобы ответить на ваш вопрос, я бы сказал, что недостаток использования кода для запуска дочерних окон будет зависеть от вашей личной ситуации, но вряд ли это серьезный недостаток, если таковой имеется.

+1

'Hardcore MVVM разработчики могут сказать, что вы никогда не должны использовать код за файлами' Это разработчики, которые не понимают MVVM –

+0

Возможно,« хардкор »не был лучшим способом описать их, но да ... они те о котором я говорил. :) – Sheridan

Смежные вопросы