5

При запуске нового приложения mvvm-wpf я обычно включаю mvvm-light прямо в начале. Это работает отлично, пока мое приложение не растет.Является ли стандартный ViewModelLocator от MvvmLight AntiPattern? И как смягчить это?

В некоторых местах вдоль линии ViewModelLocator становится огромным (многие ViewModels для всех видов ChildViewodels). И еще дальше по кроличьей дыре мне нужно несколько разных экземпляров одной и той же модели. (например, для списка элементов, с которыми вы хотели бы взаимодействовать на одном экране). Вот где начинается борьба, как справиться с этим приятным, последовательно поддерживать код под контролем?

Итак, если я хочу избавиться от ViewModelLocator (это antipattern? Чувствует себя как ServiceLocator), следует ли мне перейти на ViewModel-first и создать (многие) абстрактные фабрики для всех ViewModels?

ответ

0

ViewModelLocator - это причудливое имя для навигационной шины, используемой для инверсии управления (IoC). Хотя это, кажется, более новая технология, навигационная шина действительно использует служебную шину по-другому. Это не анти-шаблон, если у вас есть статический (совместно используемый в VB) контейнер. Анти-шаблон появляется, если вы проходите контейнер вокруг в своих моделях ViewModels.

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

Дизайн схема может выглядеть следующим образом:

  • Клиент
    • Модели
    • ViewModels
    • Услуги
  • Заказы
    • Модели
    • ViewModels
    • Услуги

и т.д ... Это действительно сводится к аромату разработчика. Пока ваш дизайн согласован.

Дополнительная информация: Чтобы лучше понять, что ViewModelLocator ищет Навигационная шина. Чтобы лучше понять EventAggregator, найдите Сообщение Автобус

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