Как разработать расширяемое программное обеспечение (сменная архитектура)? [закрытый]

72
задан Laurel 24 March 2016 в 17:53
поделиться

10 ответов

Вместо того, чтобы перестраивать колесо, используйте платформы в руке. Eclipse и Netbeans оба поддерживают основанные на плагине расширения. Необходимо работать в Java все же.

-8
ответ дан questzen 24 November 2019 в 12:46
поделиться

Контроль "CAB" - Microsoft Платформа Стандартных блоков Приложения Состава . Я думаю, что у них есть "веб-версия" этого также...

0
ответ дан Thomas Hansen 24 November 2019 в 12:46
поделиться

Я только что начал разрабатывать умное клиентское приложение. Это две опции, которые я рассматриваю.

Используя Microsoft Система. Пространство имен AddIn . Выглядит очень перспективным, однако это может быть немного комплекса для нашего решения для конца.

Или Умный Клиент - Составной объект Блок приложений UI от Microsoft

Недавно, я посмотрел на взятие компонентов и Составной объект Блок приложений UI и Система. Пространство имен AddIn для создания моего собственного. Так как исходный код доступен для CAB, который легко расширить. Я думаю, что нашим решением для конца будет версия легкого веса CAB, definatly использование Блок приложений

Единицы
0
ответ дан Rohan West 24 November 2019 в 12:46
поделиться

Конечно, существует известное, Открывают Closed Principle - http://en.wikipedia.org/wiki/Open/closed_principle

3
ответ дан LenW 24 November 2019 в 12:46
поделиться

Вы пытаетесь достигнуть двух конкурирующих голов:

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

Объяснение: Для поощрения повторного использования кода необходимо быть в состоянии расширить существующие классы и назвать их методы. Это не возможно, когда методы объявляются "частные", и классы являются "окончательными" (и не может быть расширен). Таким образом для удовлетворения этой цели все должно быть общедоступным и доступным. Никакие частные данные или методы.

при выпуске второй версии программного обеспечения Вы найдете, что многие идеи версии 1 были просты неправильный. Необходимо изменить много интерфейсов или код, имена методов, удалить методы, повредить API. Если Вы сделаете это, многие люди будут отворачиваться. Таким образом, чтобы быть в состоянии развить Ваше программное обеспечение, компоненты не должны представлять ничего, что не абсолютно необходимо - за счет повторного использования кода.

Пример: Я хотел наблюдать положение курсора (каре) в SWT StyledText. Каре не предназначено, чтобы быть расширенным. Если Вы сделаете это, Вы найдете, что код содержит проверки как, "этот класс в пакете org.eclipse.swt", и много методов является частным и окончательным и этажерка. Я должен был скопировать приблизительно 28 классов из SWT в мой проект только для реализования этой опции, потому что все заблокировано вниз.

SWT является хорошей платформой для использования и ад для расширения.

4
ответ дан Aaron Digulla 24 November 2019 в 12:46
поделиться

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

теория здесь .

(свободный!) книга там .

Расширяемость и способность записать плагин должны иметь дело с [1 122] сервисный жизненный цикл

  • добавление / удаление сервиса/плагина на месте
  • руководящие зависимости между сервисами
  • руководящие состояния сервисов (объявленный, установленный, запустился, остановился...)

, Для чего OSGI?

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

Вы найдете хорошее введение здесь на центральном понятии [1 123] сервис (который связан с Вашим вопросом, и которые объясняют некоторые проблемы вокруг сервисов, ключевого компонента для расширяемости).

Извлечение:

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

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

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

15
ответ дан VonC 24 November 2019 в 12:46
поделиться

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

Для c ++ сервер Apache httpd фактически основан на подключаемых модулях, но вместо этого используется концепция модуля. Большинство функций apache реализованы в виде модулей, таких как кеширование, перезапись, балансировка нагрузки и даже потоковая модель. Я когда-либо видел это очень модульное программное обеспечение.

А для java Eclipse определенно основан на плагинах. Ядро Eclipse - это модульная система OSGI, которая управляет пакетами - еще одна концепция плагинов. Bundle может предоставлять точки расширения, на которых мы можем создавать модули с меньшими усилиями. Самая сложная вещь в OSGI - это его динамическая характеристика, что означает, что пакеты могут быть установлены или удалены во время выполнения. Больше никакого синдрома остановки мира!

0
ответ дан 24 November 2019 в 12:46
поделиться

Ну, это зависит от языка.

  • В C / C ++ я уверен, что есть функция нагрузки, которая позволяет открыть библиотеку во время выполнения и вызвать ее экспортированные функции. Обычно это то, как это сделано в C / C ++.
  • в .NET, есть отражение, которое предлагает аналогичные (но более широкие) до лестницы. Существуют также целые библиотеки, построенные на отражении, такие как управляемая рамочная рамки, или Mono.Addins, который уже делает большую часть тяжелой подъема для вас уже.
  • В Java есть также отражение. И есть JPF (Framework плагин Java), которая используется в таких вещах, как Eclipse IIRC.

В зависимости от того, на каком языке вы используете, я мог бы порекомендовать некоторые учебные пособия / книги. Я надеюсь, что это было полезно.

2
ответ дан 24 November 2019 в 12:46
поделиться

Статья написание приложений на основе плагинов четко объясняет обязанности различных частей архитектуры, используя очень простой пример; Исходный код предоставляется (vb.net). Я нашел это очень полезно в понимании основных концепций.

1
ответ дан 24 November 2019 в 12:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: