Обязательно ли компонуемое приложение подразумевает архитектуру на основе плагинов?

В настоящее время я работаю над приложением и хотел бы добавить в него новые функции.

Одним из них было бы обновление кода приложения напрямую.

Другой вариант — предложить уровень расширяемости, в который будут добавляться новые функции.

Прочитав несколько сообщений об архитектуре плагинов и использовании MEF для создания составных приложений, я немного запутался, означают ли эти два термина одно и то же, и если нет, то чем они отличаются?

Кроме того, мне интересно узнать о любых хороших дизайнерских решениях, которые помогают «открыть» мое приложение, чтобы облегчить расширение в будущем (новые варианты будущего могут быть добавлены «как расширение»)


person lysergic-acid    schedule 27.04.2012    source источник


Ответы (1)


Вам определенно понадобится архитектура на основе подключаемых модулей, чтобы иметь общую структуру расширяемости.

Однако вам не обязательно нужен контейнер зависимостей или MEF.

Это может быть так же просто, как определить интерфейс IPlugIn и просмотреть сборки для типов, реализующих интерфейс. Затем создайте экземпляр типа, чтобы начать работу.

person Eben Roux    schedule 27.04.2012
comment
Остается проблема - как задействовать множество опций/событий приложения для настройки и расширения. Простой интерфейс IPlugin не помогает в этом. - person lysergic-acid; 27.04.2012
comment
Это зависит. Вы должны решить, что влечет за собой расширение. IPlugIn может иметь метод IEnumerable<Message> Messages(), для которого вы создаете меню, которое каким-то образом вызывает сообщения. Большинство архитектур подключаемых модулей будут иметь определенную структуру, которая логически вписывается в ваш хост/оболочку. - person Eben Roux; 27.04.2012
comment
Это именно моя проблема - мой плагин или расширение вообще не вписываются ни в какое конкретное место, но должны быть в состоянии смешаться практически с любым местом в моем приложении. Конечно, я мог бы предоставлять различные интерфейсы IPlugin (IPluginUI и т. д.) для расширения или взаимодействия с различными аспектами приложения. - person lysergic-acid; 27.04.2012
comment
Вы можете пойти по маршруту с несколькими интерфейсами (сохраняя роли в явном виде). Даже что-то такое универсальное, как MMC, имеет специфическую структуру. - person Eben Roux; 29.04.2012