Шаблон проектирования для приложения на основе установленного модуля - PullRequest
0 голосов
/ 18 мая 2011

Может ли кто-нибудь указать мне правильное направление относительно того, на какие шаблоны проектирования я должен смотреть.

Существует базовое приложение, и мы можем разработать более одного бизнес-модуля.Каждый модуль разрабатывается независимо, и существует требование объединить эти модули в одно приложение.Модули могут также нуждаться во взаимодействии друг с другом.

Таким образом, может быть несколько комбинаций, и поддержание каждой комбинации просто невозможно в долгосрочной перспективе.

Я определил взаимодействие между модулямии думал об их разделении с использованием абстрактных классов.Это означает, что когда я объединяю 2 модуля, мне просто нужно скопировать производные классы, и они должны просто работать.Есть ли название для такого шаблона дизайна?

Есть ли другие шаблоны дизайна, которые могли бы мне помочь?

Ответы [ 2 ]

0 голосов
/ 18 мая 2011

Легко.

Система плагинов:

  1. Создайте интерфейс IApplicationHost, который определяет набор базовых методов (например, методы Resolve и Register в инверсии управления / внедрения зависимостей).
  2. Создать интерфейс IPlugin, который имеет метод Setup(IApplicationHost host). Каждый плагин использует его для настройки плагина.
  3. Добавить Start метод к IPlugin тоже.

3) необходимо, так как плагины могут зависеть друг от друга. Сначала вы вызываете Setup для каждого плагина, чтобы он мог зарегистрировать свои реализации интерфейса и т. Д. Следующее, что нужно сделать, это снова пройти через все плагины, чтобы вызвать метод Start для каждого.

Все плагины загружаются с помощью Assembly.Load. Просто назовите все плагины, например plugin_XXXX.dll, чтобы их можно было легко идентифицировать.

Плагин архитектуры

Поскольку плагины могут использовать друг друга, вам нужен какой-то способ для поддержки этого. Самый простой способ - использовать шаблон Separated Interface, который означает, что вы помещаете все доменные объекты и сервисные интерфейсы в отдельную сборку. Это также значительно упрощает обратную совместимость при выпуске новых версий плагинов. Просто никогда не меняйте интерфейсы, расширяйте их.

Затем создайте библиотеку классов для фактического плагина. Он должен зависеть от собственной сборки интерфейса, сборки приложений и всех спецификаций сборок плагинов, от которых он зависит.

0 голосов
/ 18 мая 2011

Плагин позволит хост-приложению динамически загружать функциональность (в соответствии с интерфейсом) в отдельные модули.

Если вы разрабатываете для Windows в .NET winforms, предложите вам взглянуть на Smart Client Software Factory

...