Каковы основные недостатки использования Presentation Model в коде?
Я пытаюсь подготовить себя к ответу на вопрос:
"Почему мы не можем просто реализовать модель представления в коде?"
На самом деле я работал над проектом, в котором мы использовали модель представления, которая была реализована в коде. Он работал довольно хорошо, мы даже смогли запустить модульные тесты на нем. Да, у вас есть зависимость от WPF в ваших модульных тестах... но это работает!
Каковы же основные недостатки использования кода?
Я предпочитаю идею независимой ViewModel (MVVM), но в настоящее время я не чувствую себя способной оправдать это для клиентов.
4 ответа
Это становится недостатком, когда вы используете подход ViewModel-First. где в вашем основном приложении вы создаете экземпляр своего графа объекта ViewModel, назначаете его корневому представлению данных и затем позволяете представлению отображать связанный с ним дочерний элемент на основе уведомления ViewModel.
Почему это недостаток? тот факт, что вы можете использовать свой код позади, но в конечном итоге вы получите множество хитростей, и иногда вам придется забыть о безопасности вашего приложения. Но на самом деле этот подход является идеальным, когда ваша view-модель абсолютно неосведомлена, даже вы можете изменить процесс разработки с помощью первой программы, а затем - последней. (Шучу)
с другой стороны, если вы используете подход View-First, недостатка не будет, потому что viewmodel сидит на нем.потому что контроль все еще в представлении, если вам нужно что-то хитрое, например, с использованием поля пароля, тогда просто сделайте это, как, например, Microsoft обрек нас.
Надеюсь, это поможет.
Вы ответили на первую часть вашего вопроса о необходимости загрузки приложения wpf во время модульного тестирования. Другая - это мобильность, хотите ли вы иметь возможность присоединять реализации различных представлений к той же модели представления. (Слабый, я знаю, но это все, что вы получили)
Также разделение набора навыков, только разработчики, которые знают xaml, будут вовлечены в фактическое создание представления. Позволяет вам использовать существующий в доме талант, который не знает wpf.
Прямой ответ - принцип разделения интересов. Конечно, кто-то может поспорить, что, поместив модель представления в код позади, она будет отделена от представления (XAML), но я не согласен с этим. Выделенный код может "видеть" все внутренние детали представления, потому что это представление. И xaml, и выделенный код скомпилированы вместе в один класс, чтобы стать представлением. Они не являются отдельными вообще.
Есть много примеров, когда вам нужно идти в код, чтобы выполнять связанные с представлением вещи, такие как соединение взаимодействий между элементами управления, которые вы просто не можете указать в Xaml. Как только вы это сделаете, ваша логика представления будет смешана с логикой представления.
Концепция ViewModel довольно мощная. ViewModels могут "общаться" друг с другом без представления "разговоров" друг с другом или даже без того, чтобы ViewModels "ничего" не знали о представлениях.
Проверьте это два видео, чтобы получить представление. Оба видео показывают разработку приложений, начиная со всего, что в коде, а затем они рефакторинг в шаблон MVVM.
- Серия видеороликов Майка Таулти (на самом деле их всего 10, отметьте хотя бы первое и второе)
- Джейсон Долингер на Модель-Вид-Вид-Модель
Кроме того, см. Этот вопрос SO для получения дополнительных ссылок: MVVM: учебник от начала до конца?