MEF против ПРИЗМЫ. В чем разница? Что будет поддерживаться в будущем?

Я хочу создать приложение Silverlight с несколькими вкладками / модулями, которые будут отдельными библиотеками DLL.

Я вижу, что у PRISM есть концепции Shell/Module, которые, похоже, направлены на создание пользовательского интерфейса, и я нахожу хорошую демонстрацию (показывающую, как искать digg/twitter).

Но похоже, что MEF будет включен в VS2010, поэтому я бы хотел воспользоваться этой возможностью.

Может кто-нибудь как-то четко объяснить различия? (Я не продвинутый программист)

4 ответа

Решение

MEF и Prism служат двум совершенно различным целям.

Prism - это в основном руководство для разработки составных приложений, где у вас есть оболочка и "области", которые динамически назначаются и интегрируются. Он включает в себя контейнер IoC (Unity), который он использует для инъекции.

MEF - это структура внедрения зависимостей - ее главная цель - "заполнить" зависимости во время выполнения приложения. В этом отношении он выполняет ту же цель, что и Unity в Prism (и, на самом деле, вы можете довольно легко переделать Prism, чтобы использовать MEF вместо Unity).

Prism заполняет более широкую область, в некоторых отношениях, но также действительно ограничена приложениями GUI. MEF просто делает одну вещь (Dep. Injection), но предназначена для более общего назначения, для любого типа приложений.


Что касается срока службы этих продуктов - здесь нет ответа, но это своего рода способ их разработки:

Prism была разработана командой Patterns and Practices. Целью является не обязательно создание программного обеспечения, а предоставление руководства. Таким образом, они обновляют (хотя и нечасто) библиотеку и пример Prism, но Prism не является основной частью платформы, поставляемой Microsoft. Это действительно сторонняя библиотека (хотя MS финансирует большую ее часть, большинство сотрудников P&P не MS FTE).

MEF из постов блога звучит так, как будто его планируется интегрировать в фреймворк и использовать непосредственно внутри MS-проектов. Как таковой, он получает серьезную разработку, непосредственно от Microsoft, и используется в их продуктах.

Я лично прочитал документацию Prism (и у меня есть книга) и ознакомился с образцами. Очень полезно понять, как разбить приложение на части, но на самом деле это руководство, а не полная, полезная среда. Образцы очень хорошо справляются со своими задачами - учат архитектора проектировать составное приложение.

Если ваша цель - просто сохранить четкое разделение проблем в приложении Silverlight, я бы больше сосредоточился на изучении MVVM, чем на использовании Prism.

Если вы хотите использовать MEF, есть и другие хорошие варианты. Например, WPF Application Framework - это целая среда MVVM, построенная поверх использования MEF, и довольно приятная.

По сути, MEF является универсальной средой расширяемости:

Если вы создаете расширяемые приложения, расширяемые платформы и расширения приложений, то MEF для вас.

в то время как Prism в основном для создания графических интерфейсов:

Руководство по составным клиентским приложениям предназначено для упрощения создания модульных клиентских приложений Windows Presentation Foundation (WPF) и Silverlight.

Так что MEF и Unity - это одно и то же...

Ну, не совсем так. MEF больше ориентирован на расширения, которые не известны во время компиляции, в то время как контейнеры IOC обычно фокусируются на зависимостях, которые известны во время компиляции. Лучший ответ на этот вопрос дает хорошее объяснение различий.

Другие вопросы по тегам