2011-01-20 3 views
39

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

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

Если вы начали проект с нуля прямо сейчас, с чем бы вы пошли и почему? Информация о конкретных рекомендуемых шаблонах архитектуры была бы полезна (например, автоматическое обнаружение DLL-модулей? Служба регистрации ввоза?). В принципе, любые мысли и советы были бы хорошими. Я бы хотел, чтобы хорошая дискуссия шла. Возможно, есть другое направление, которое вы хотели бы предложить? Я очень нахожусь на этапе исследований и хотел бы как можно больше вклада.

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

ответ

55

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

Был вопрос несколько дней назад о том, как моделировать Призма. Проверьте это, чтобы получить подробное объяснение того, как рассматривать функциональность Prism. High Level Modelling Advice for Prism MVVM

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

MVVM Light на самом деле является бесплатным каркасом для призмы. Другие рамки MVVM рассмотреть следующие вопросы:

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

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

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

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

+0

Извините за отсроченный ответ на этот вопрос, неожиданно у вас был приоритет другой проект, и это было отодвинуто на задний план. Очень полезный ответ, я посмотрю на другие темы и рамки, на которые вы указали меня. – David

+0

Я бы предложил проверить MEF для silverlight как дополнение или дополнение для композиционных аспектов Prism. –