Является ли Model-View-ViewModel лучшим шаблоном для использования в WPF? Есть ли недостатки?Каковы проблемы шаблона MVVM?
ответ
Вот хорошее короткое сообщение в блоге на advantages and disadvantages of MVVM, прямо из самого Джона Госсмана.
Его основные недостатки являются:
«Для простого пользовательского интерфейса, MV-VM может быть излишним в больших случаях, это может быть трудно проектировать ViewModel фронта, чтобы получить нужное количество общности данных.. привязка ко всем ее чудесам декларативна и сложнее отлаживать, чем хороший императивный материал, где вы только что установили точки останова ».
Да, это излишество для небольших приложений мирового уровня.
которые на самом деле не существуют –
Это отличный образец и, откровенно говоря, один из немногих размытых шаблонов UI для WPF. Я имею в виду, что многие понимают и принимают его. Поэтому относительно легко получить помощь и информацию об этом.
Самый большой недостаток, на мой взгляд, заключается в том, что он увеличивает количество классов и компонентов в вашем приложении, потому что SRP козыри DRY в этом шаблоне. Сказав это, я думаю, что это того стоит.
Чтобы создать наше приложение, мы начали с 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.
Прошло некоторое время с тех пор, как я задал оригинальный вопрос. За это время я много работал с MVVM в моем проекте. Итак, с наследованием вам нужен класс, который наследует View и ViewModel одновременно? Является ли этот класс View или ViewModel? Повторный код в ViewModels можно решить, используя службы и любые типы IOC. ViewModel binding и «ViewModel - это не только CodeBehind». Я согласен с этим. –
Сервис и IOC очень сложны для приложений среднего размера. Хуже того, их слишком сложно отлаживать и управлять в небольшой команде. Хотя у него есть преимущества, но для молодой крови это слишком сложно. –
Различные модели имеют разные сильные стороны. Люди склонны путать шаблон с реализацией. Как организованная или доступная бизнес-логика влияет на то, какой шаблон более естественен для приложения подачи. Поэтому, когда этот вопрос задает вопрос о WPF, может быть полезно прочитать три шаблона, которые трижды применялись к одному и тому же экрану в любых рамках.
Ниже приведена ссылка на статью java, в которой сравнивается MVVM («модель представления») с MVP («пассивное представление») и гибридная реализация MVVMP/MVC («контрольный контроллер»). Я считаю, что это имеет отношение к этому вопросу, поскольку у него есть раздел, в котором есть сравнение моделей.
Implementing event-driven GUI patterns using the ZK Java AJAX framework
Это указывает на слабость, которая делает Джон Госсман, но и продолжает сравнивать обе сильные стороны и слабые стороны с двумя альтернативными узорами.
- 1. Каковы хорошие ресурсы MVVM?
- 2. Каковы потенциальные проблемы при написании кода бизнес-логики в графическом интерфейсе в виде шаблона MVVM
- 3. Правильный выбор шаблона MVVM
- 4. Каковы основные стратегии шаблона шаблона
- 5. Правильное использование MVVM-шаблона
- 6. Понимание шаблона MVVM
- 7. Нарушение шаблона MVVM: MediaElement.Play()
- 8. WPF MVVM Проблемы с просмотром
- 9. Каковы фактические преимущества шаблона посетителя? Каковы альтернативы?
- 10. Проблемы с привязкой - MVVM
- 11. Проблемы с дизайном MVVM
- 12. Применение шаблона MVVM в QtQuick
- 13. WPF MVVM - запрос шаблона репозитория
- 14. Каковы возможные проблемы XHR
- 15. Каковы недостатки шаблона проектирования фасадов?
- 16. Каковы параметры шаблона std :: priority_queue?
- 17. Каковы основные элементы шаблона Singleton?
- 18. Почему MVVM и каковы основные преимущества?
- 19. Каковы ваши стратегии привязки DataContext в MVVM?
- 20. Проблемы с шаблоном проектирования MVVM
- 21. MVVM + Datacontext + DataTemplate + Blend = проблемы
- 22. Каковы недостатки использования кода для обработки дочерних окон в MVVM?
- 23. Каковы некоторые проблемы с GTFS?
- 24. Каковы проблемы с вектором векторов?
- 25. Каковы реальные проблемы с Ruby?
- 26. Каковы проблемы безопасности для JSF?
- 27. Каковы мои проблемы с развязкой?
- 28. Каковы проблемы создания рамки CSS?
- 29. Каковы проблемы безопасности с диаспорой?
- 30. Использование шаблона проектирования MVVM в .Net 3.0
Это было конструктивно! – Vahid