Я слышал много шумихи о MVVM для WPF.
Когда мы его используем?
Используется ли оно для всего или имеет только конкретные виды использования?
Стоит ли это для каждого проекта?Когда мы используем MVVM?
ответ
Это может быть полезно в любом проекте, но я считаю его особенно полезным в ситуациях, когда требуется четкое разделение между бизнес-логикой, логикой взаимодействия и пользовательским интерфейсом (большие приложения или приложения с участием нескольких разработчиков/дизайнеров).
Модель = Business Logic
- Содержит модель любой бизнес-процесс/объект Я работаю с.
ViewModel = Взаимодействие Logic
- Весь код, который определяет, как модель доступна и модифицируется (например, редактировать/отменить функциональность, отложенной загрузки и т.д.)
View = Пользовательский интерфейс
- Интерфейс (определенный в XAML), с которым пользователь взаимодействует. Я пытаюсь свести к минимуму использование кода в этом слое, нажав его в Attached Properties или ViewModel.
Существует много других применений для MVVM, но этот конкретный сценарий является тем, который, как мне показалось, является самым полезным в моем собственном опыте разработки WPF.
Я нашел его полезным даже в относительно небольших проектах, если я много использую привязку данных и модель/модели данных объекта.
Что касается WPF и Silverlight?
Теоретически для всего - каждый нетривиальный проект (и, возможно, даже тогда). Его часть более широкого процесса (он создает разделение проблем и позволяет тестировать и другие приятные вещи). В принципе, если вы собираетесь это сделать (и я думаю, что вы, вероятно, захотите, я, конечно, намерен работать с новыми проектами), тогда вы должны сделать это в значительной степени по всем направлениям.
Если вы еще этого не сделали, посмотрите видеоролик, связанный здесь: http://blog.lab49.com/archives/2650 - Мне было очень полезно получить мои идеи.
Лучше спросить: когда не должен вы используете его? Наиболее очевидным примером является то, что привязка данных не подходит, и вам нужно манипулировать элементами представления непосредственно в коде - если, например, вашему приложению необходимо обновить визуальное состояние сотен или тысяч визуальных элементов в реальном времени, вы можете не сможет позволить себе накладные расходы на привязку данных.
В настоящее время я работаю над большим проектом, где мы реализуем mvvm, CAL (составное руководство по применению) в Silverlight. Конечно, уровень разделения проблем очень высок. Но
1) код становится слишком надежным.
2) MVVM отлично подходит для небольших проектов (все эти образцы hello-world во всем Интернете), но это уменьшает ваши возможности: например, события с маршрутом (отличный инструмент) все еще являются СОБЫТИЯМИ, но, как вы знаете, это строго запрещено использовать их напрямую, как только это будет code-behind), если вы хотите следовать mvvm.
3) Командная привязка STILL не работает должным образом в Silverlight (.net4.0, vs2010). Это долгая история, просто помните об этом удивлении, когда делегат CanExecute не запускается при запуске приложения.
Хороший ответ на ваш вопрос: «MVVM хорош для проектов с простой логикой пользовательского интерфейса».
Спасибо, Илья.
Каждый раз, когда я начинаю с простого проекта и думаю, что «это так просто, MVVM будет излишним», примерно через 8 часов я доберусь до точки, где понимаю, что использование MVVM сделает вещи намного проще.
Поэтому я бы сказал, что большую часть времени, используя MVVM, на самом деле упростит вашу логику пользовательского интерфейса, даже если вы изначально думаете, что это будет излишним. У проектов есть привычка усложняться с течением времени, а разделение логики бизнеса и логики просмотра, применяемых MVVM, позволяет проекту развиваться гораздо более контролируемым образом, чем иметь деловые и логические интерфейсы, смешанные вместе.
- 1. Когда мы используем Element? Когда мы используем Helper? Когда мы используем View Cells? в CakePHP 3
- 2. Когда мы используем recyclerView.setHasFixedSize?
- 3. Когда мы используем XMLSerialization?
- 4. Когда мы действительно используем Trie?
- 5. Когда/где мы используем XMLRPC
- 6. Когда мы (действительно) используем RenderScript?
- 7. Android: Когда мы используем getIntent()?
- 8. Когда мы используем файл msbuild?
- 9. Где/когда мы используем JSON?
- 10. Когда мы используем транзакции WCF?
- 11. Когда мы используем сервис Windows?
- 12. Когда мы используем Yii RbAC?
- 13. когда используем процедуру и когда мы используем функцию?
- 14. Когда мы используем $ scope, и когда мы используем var в AngularJS?
- 15. Когда мы используем глобальные индексы и когда мы используем локальные индексы в Oracle?
- 16. Что именно происходит, когда мы используем ajax
- 17. Что произошло, когда мы используем публикацию clickonce
- 18. когда мы используем блокировку и разблокировку QMutexLocker?
- 19. Что происходит, когда мы используем updatepanel?
- 20. Когда мы используем Assert.Pass() в DUnitX?
- 21. Когда мы используем HashSet <>
- 22. GUI приклеивается, когда мы используем double Stream
- 23. Когда мы используем поставщиков в Angular 2?
- 24. ERR_CONNECTION_REFUSED когда мы используем https: // без WWW
- 25. C++ исключения уловов, когда мы используем классы
- 26. , когда мы используем @controller и MultiActionController вместе
- 27. , когда мы используем веб-службы SOAP?
- 28. Что происходит, когда мы произвольно используем ==?
- 29. Когда мы используем функцию web_set_timeout в loadrunner?
- 30. Когда мы не используем Combiner в Mapreduce?