Каковы преимущества и недостатки архитектуры на основе плагинов? - PullRequest
23 голосов
/ 12 мая 2010

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

Стандартные типы проектов будут добавлены на платформу по умолчанию. Тип проекта определяет способ выполнения различных программ и их входные и выходные файлы.

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

Также он должен поддерживать простое расширение и настройку функций. Я читал, что архитектура на основе плагинов поддерживает оба.

Каковы преимущества и недостатки архитектуры на основе плагинов? У нас есть какая-нибудь лучшая архитектура, которую можно использовать для такого сценария?

Заранее спасибо:)

Ответы [ 4 ]

45 голосов
/ 17 мая 2010

Преимущества сменной системы:

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

Но некоторые из этих сильных сторон также являются слабыми сторонами:

  • расширяемость: предвидит ли интерфейс плагина способы, которыми автор плагина расширяет приложение, или ограничивает расширение. Разработка расширяемости для удовлетворения всех вариантов использования часто занимает несколько итераций или чрезвычайно хороший анализ требований.
  • ремонтопригодность: поставщик инфраструктуры плагинов должен не только убедиться, что интерфейс плагина удовлетворяет отступным сценариям использования, понятен и хорошо документирован, но также и что он может развиваться. Управление версиями и обратной совместимостью с существующими плагинами может быть очень сложным. Достаточно сложно, чтобы многие практические реализации не беспокоили, и заставляют авторов плагинов обновлять свои плагины с каждой версией.
  • сложность: хотя каждый плагин работает, когда тестируется отдельно, взаимодействие между плагинами может вызвать новые проблемы, при этом ошибки появляются только при определенных комбинациях плагинов.
  • тестирование: тестирование плагинов может быть затруднено, если система плагинов не предоставляет какую-либо форму запуска прогона плагинов для тестирования, что иногда невозможно, и тестирование доступно только при реальном запуске плагина, что замедляет разработку.
  • искусственное разделение: плагин, как правило, имеет один фокус, но то, что составляет единый фокус, устанавливается поставщиком API плагина. Если автор плагина находит, что ему нужен плагин, который может разумно делать 2 вещи (как определено API плагина) в тесном тандеме, он может в конечном итоге реализовать два плагина и найти способы обеспечения связи между ними, которая в настоящее время не обеспечивается api. Затем ему приходится работать вокруг или против структуры плагинов.

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

" Синдром второй системы ", описанный Фредом Бруксом, утверждает, что разработанная вторая система часто является чрезмерно общей, стремясь к максимальной гибкости, иногда создавая "платформу внутри платформы" / " внутреннюю Эффект платформы". Встраиваемая конструкция часто рассматривается как выход, когда требования отсутствуют или занижены. Чтобы компенсировать это, программное обеспечение сделано настолько гибким, насколько это возможно, чтобы попытаться обработать «все, что приходит»

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

5 голосов
/ 16 мая 2010

Преимуществами архитектуры подключаемых модулей, очевидно, является увеличение гибкости. Это позволяет другим разработчикам расширять ваше приложение способами, которые в первую очередь не ожидались. Обратите внимание, что существуют различные архитектуры плагинов, от гибких до чрезвычайно гибких. Наиболее гибкая архитектура называется Full Plug-in, которая используется в eclipse .

.

Недостаток заключается в том, что для того, чтобы быть по-настоящему гибким, необходимо разработать надежную структуру, которая включает загрузку, выгрузку и обмен данными между плагинами. Кроме того, при подключении между подключаемыми модулями будут наблюдаться незначительные потери производительности.

Для обсуждения того, как создать архитектуру плагина, взгляните на этот вопрос.

3 голосов
/ 20 мая 2010

Хотя поддерживать архитектуру на основе плагинов непросто, почему люди так развиваются? Потому что все же лучше, чем другие «фиксированные» подходы. Скажите, если ваши требования меняются один за другим, и дизайн должен быть исправлен, то подумайте, что будет с другими подходами?

Лучшее в этом - параллельная разработка. Когда клиент хочет использовать некоторые функции как можно скорее, разработчики могут работать параллельно и подключать свой код как плагины / компоненты. В основном архитектура Plug-n-Play обеспечивает гибкость и сложность, но сложность возникает впервые. Как только ваша команда освоится с этим, им будет легко обрабатывать код, ошибки и т.д ...

Когда вы хотите интегрировать различные сторонние приложения, как вы упомянули, будет лучше разработать их как плагин ИЛИ на основе компонента / сервиса. (Я не хочу вас смущать, но SOA может представлять интерес.) Так что вы можете включать / выключать сервис / плагин, когда он не нужен. Даже вы можете получить выгоду от этого, когда захотите использовать модель SAAS (Software As A Service), где вы получаете доход за каждую отдельную услугу / функцию:).

Для справки вы можете проверить следующие рамки JAVA. Доступно множество ESB, которые предоставляют архитектуру plug-n-play, основанную на компонентах / услугах.

Надеюсь, это поможет.

спасибо.

1 голос
/ 15 мая 2010

Вы можете найти преимущества и небольшой плагин, который вы можете использовать по адресу текст ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...