МВВМ Лайт + Единство или Призма? - PullRequest
39 голосов
/ 20 января 2011

Я немного устарел в WPF сейчас, и мне было бы интересно услышать мнения людей о последней версии Prism (которую я использовал пару версий назад) по сравнению с подходом MVVM Light + Unity (который яникогда не делал - достойные примеры URL были бы хороши).

Мой проект будет большим, включающим несколько модулей, написанных несколькими разработчиками.Также есть средства для привлечения стороннего пакета управления для создания удобного рабочего пространства с использованием одного из причудливых менеджеров компоновки Docking / Workspace (и я знаю, что некоторые лучше взаимодействуют с регионами Prism, чем другие).

Если бы вы начинали проект с нуля прямо сейчас, с чем бы вы пошли и почему?Были бы полезны подробности о конкретных рекомендуемых шаблонах архитектуры (например, автоматическое обнаружение модулей dll? Injecting logging service?).В принципе, любые мысли и советы будут хорошими.Я хотел бы получить хорошую дискуссию.Возможно, есть еще одно направление, в котором вы бы хотели пойти?Я очень нахожусь в стадии исследования и хотел бы получить как можно больше информации.

Я поставил это здесь, потому что думал, что это получит менее предвзятую точку зрения, чем форумы Prism / MVVM Light, но, еслиЕсть более подходящее место для этого вопроса, пожалуйста, укажите мне в этом направлении.

1 Ответ

55 голосов
/ 21 января 2011

Если вам нужна модульность, вам стоит взглянуть на Prism.Prism имеет несколько элементов, которые могут помочь вам с MVVM (например, DelegateCommand и CompositeCommand), но я думаю, что он более завершен с другой инфраструктурой MVVM.

Несколько дней назад возник вопросо том, как моделировать призму.Проверьте это для подробного объяснения того, как рассмотреть функциональность Prism. Советы по моделированию высокого уровня для Prism MVVM

Unity - это реализация инверсии контейнера управления, и это, безусловно, хорошо, но Prism имеет возможность использовать другие контейнеры.Он имеет встроенную поддержку MEF (которая, в свою очередь, встроена в .NET 4.0), но это не единственный ваш выбор.Посмотрите на некоторые образцы, включенные в Prism, и решите, какой подход вам больше нравится.На мой взгляд, Unity не является полным для композитинга пользовательского интерфейса.MEF может быть более близким выбором, если вы хотите попытаться объединить пользовательский интерфейс с подходом MVVM Framework + IoC Framework.

MVVM Light на самом деле является дополнительной платформой для Prism.Другие фреймворки MVVM для рассмотрения:

  • Фонд MVVM (очень легкий ... подходит для небольших проектов)
  • Caliburn (очень надежный фреймворк)
  • Caliburn Micro (акцииимя и автор из Caliburn, но это похоже на MVVM Light с некоторыми приятными соглашениями)
  • ReactiveUI (Раньше "ReactiveXAML". Это что-то вроде плавления мозгов, но если выИзучите Reactive Extensions для .NET (Rx), этот фреймворк просто потрясающий ... по моему мнению, волшебный.)

Если бы я собирался начать новый проект: я бы выбрал Prism и ReactiveUI,

Prism, потому что у вас должна быть модульность с большими проектами, и мне нравится возможность удалять и добавлять большие функциональные единицы в приложение, просто удаляя или добавляя библиотеки DLL (и вам не нужно реализовывать анализ DLL)функция, как вы бы только с подходом IoC + MVVM).Легче тестировать, легче отлаживать, легче разрабатывать отдельно.Приятно повсюду.

ReactiveUI, потому что в наши дни при программировании пользовательского интерфейса большая часть времени тратится на управление временем в потоке пользовательского интерфейса.Блокировка запрещена ... пользователи не хотят видеть зависание пользовательского интерфейса;они хотят видеть, как вращается анимированный символ ожидания GIF, поэтому они знают, что могут работать над чем-то другим во время загрузки ваших данных.Кроме того, значительная часть полезных приложений, предоставляемых сегодня, берет данные из разрозненных систем и объединяет их в пользовательском интерфейсе ... не только вам понадобится хорошая система компоновки (Prism), но вам также понадобится хорошая среда MVVMкоторый обрабатывает асинхронные операции как хлеб с маслом ... ReactiveUI это так.

...