Я хочу сделать архитектурный проект для программного обеспечения, которое может использоваться, интегрируют различное внешнее программное обеспечение (исполняемый файл) под одной платформой.
Стандартные типы проекта будут добавлены к платформе по умолчанию. Тип проекта определяет путь, которым другое программное обеспечение будет выполняться и их входные и выходные файлы.
Пользователь может настроить доступный стандартный тип проекта, и это будет добавлено к платформе как новый тип проекта, который определяет новый пользовательский поток выполнения.
Также это должно поддерживать легкое расширение и настройку функций. Я считал, что основанная на плагине архитектура поддерживает обоих.
Каковы преимущества и недостатки основанной на плагине архитектуры? У нас есть какая-либо лучшая архитектура, которая может использоваться для этого вида сценария?
Заранее спасибо:)
Преимуществами подключаемой системы являются
Но некоторые из этих сильных сторон также являются слабыми:
Создание хорошей среды для плагинов сопряжено со многими из тех же проблем, что и создание хорошей библиотеки. Если вы сами создаете и среду, и плагины, то это не так уж плохо, поскольку вы можете обновлять все плагины по мере развития среды, но если api плагина открыт для всех, то для получения дизайна требуется тщательное планирование и выполнение. право избегать слишком большого количества перезаписей плагинов по мере развития среды.
« Синдром второй системы », описанный Фредом Бруксом, утверждает, что разработанная вторая система часто является чрезмерно общей, нацеленной на максимальную гибкость, иногда создавая «платформу внутри платформы» / » внутренний платформенный эффект ".Подключаемый дизайн часто рассматривается как выход, когда требования отсутствуют или не определены. Чтобы компенсировать это, программное обеспечение сделано настолько гибким, насколько это возможно, чтобы попытаться справиться с "всем, что приходит".
Извините, если это рисует мрачную картину - подключаемые системы могут быть фантастическими и иметь много преимуществ, но они имеют высокую цену. Прежде чем погрузиться в подключаемую систему, разумно составить требования для всех подключаемых модулей, которые вам понадобятся для обеспечения требуемой функциональности. Это затем поможет вам решить, стоит ли подключаемая конструкция затраченных усилий или какой-нибудь более простой подход будет одинаково хорошо работать.
Вы можете найти преимущества и небольшой фреймворк плагина, который можно использовать, на текст ссылки
Очевидно, что преимущества архитектуры подключаемых модулей заключаются в повышении гибкости. Это позволяет другим разработчикам расширять ваше приложение способами, которых изначально не ожидали. Обратите внимание, что существуют различные архитектуры подключаемых модулей, от гибких до чрезвычайно гибких. Самая гибкая из них называется архитектурой Full Plug-in, которая используется в eclipse .
Недостатком является то, что для того, чтобы быть действительно гибким, вам необходимо разработать прочную структуру, которая включает загрузку, выгрузку и обмен данными между плагинами. Также будет небольшая нагрузка на производительность при обмене данными между надстройками.
Для обсуждения того, как создать архитектуру подключаемого модуля, взгляните на этот вопрос.
Хотя поддерживать архитектуру, основанную на плагинах, нелегко, почему люди разрабатывают именно так? Потому что она все равно лучше других "фиксированных" подходов. Скажем, если ваши требования меняются одно за другим, а дизайн должен быть фиксированным, то подумайте, что делать с другими подходами?
Самое лучшее в этом - параллельная разработка. Когда клиент хочет получить некоторые функции как можно скорее, разработчики могут работать параллельно и подключать свой код в качестве плагинов/компонентов. По сути, архитектура Plug-n-Play обеспечивает гибкость со сложностью, но сложность возникает впервые. Как только ваша команда освоится с ней, им будет легко работать с кодом, ошибками и т.д....
Когда вы хотите интегрировать различные сторонние приложения, как вы упомянули, будет лучше разрабатывать их как плагины ИЛИ как компоненты/сервисы. (Я не хочу вас запутать, но SOA может быть интересен.) Чтобы вы могли включать/выключать сервис/плагин, когда он не нужен. Даже вы можете получить выгоду от этого, когда вы хотите сделать SAAS (Software As A Service) модель, где вы получаете доход за каждую отдельную услугу/функцию :).
Для справки, вы можете посмотреть следующие JAVA-фреймворки. Существует множество ESB, которые обеспечивают архитектуру plug-n-play на основе компонентов/сервисов.
Надеюсь, это поможет.
спасибо.