2009-05-19 2 views

ответ

21

Вот хорошее короткое сообщение в блоге на advantages and disadvantages of MVVM, прямо из самого Джона Госсмана.

Его основные недостатки являются:

«Для простого пользовательского интерфейса, MV-VM может быть излишним в больших случаях, это может быть трудно проектировать ViewModel фронта, чтобы получить нужное количество общности данных.. привязка ко всем ее чудесам декларативна и сложнее отлаживать, чем хороший императивный материал, где вы только что установили точки останова ».

3

Да, это излишество для небольших приложений мирового уровня.

+34

которые на самом деле не существуют –

6

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

Самый большой недостаток, на мой взгляд, заключается в том, что он увеличивает количество классов и компонентов в вашем приложении, потому что SRP козыри DRY в этом шаблоне. Сказав это, я думаю, что это того стоит.

8

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

Наследование Проблема

Мы программируем в .NET, и мы используем C# и лучшее, что мы уверены, что хотите наследования. C# не поддерживает множественное наследование классов, поэтому мы не можем иметь абстрактные классы с логикой, которые частично будут использоваться повторно в пользовательском интерфейсе, а также в логике.

Большую часть времени мы смущаемся, как создавать модели для просмотра, чтобы мы могли наследовать и контролировать логику.

Если мы наследуем View, мы не можем наследовать ViewModel в то же время, и если мы наследуем ViewModel, мы не можем наследовать View одновременно. Вместо этого мы должны использовать очень сложные дженерики и с помощью таких инструментов, как Prism и Unity, которые мы можем достичь, но это не стоит времени.

ViewModel к ViewModel Binding

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

ViewModel не простая замена CodeBehind

Предполагается, что ViewModel является простая замена CodeBehind файлов. Но, делая наше приложение, ограничение наследования учило нас, что, поскольку WPF/Silverlight поддерживает стиль пользовательского интерфейса, который может полностью отделить интерфейс с логикой, мы чуть ли не отделяем бизнес-логику в ViewModel.

Повторные код в ViewModel

В конце концов мы поняли, что мы просто написать тот же шаблон кода в каждом View и каждый ViewModel, изменение, которое становится огромной болью, и поддержание боль тоже. MVVM больше подходит для разработки, основанной на тестах, но когда дело доходит до написания расширяемых компонентов, они не являются лучшим кандидатом.


WPF/Silverlight уже позволяет отделить код и пользовательский интерфейс очень хорошо, мы на самом деле в настоящее время разработали очень простую иерархию классов, которая выполняет бизнес-логику и дать нам все, что нам нужно. Теперь мы создаем все свойства команд на основе ICommand в качестве свойств зависимостей наших классов, которые мы связываем в UserControl, а также с Templated Control.

ICommand в CodeBehind или шаблоны и стили в ResourceDictionary дает нам почти все преимущества того, что мы можем получить над MVVM.

+0

Прошло некоторое время с тех пор, как я задал оригинальный вопрос. За это время я много работал с MVVM в моем проекте. Итак, с наследованием вам нужен класс, который наследует View и ViewModel одновременно? Является ли этот класс View или ViewModel? Повторный код в ViewModels можно решить, используя службы и любые типы IOC. ViewModel binding и «ViewModel - это не только CodeBehind». Я согласен с этим. –

+0

Сервис и IOC очень сложны для приложений среднего размера. Хуже того, их слишком сложно отлаживать и управлять в небольшой команде. Хотя у него есть преимущества, но для молодой крови это слишком сложно. –

1

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

Ниже приведена ссылка на статью java, в которой сравнивается MVVM («модель представления») с MVP («пассивное представление») и гибридная реализация MVVMP/MVC («контрольный контроллер»). Я считаю, что это имеет отношение к этому вопросу, поскольку у него есть раздел, в котором есть сравнение моделей.

Implementing event-driven GUI patterns using the ZK Java AJAX framework

Это указывает на слабость, которая делает Джон Госсман, но и продолжает сравнивать обе сильные стороны и слабые стороны с двумя альтернативными узорами.

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