Каковы ключевые элементы, составляющие успешную подключаемую архитектуру, при разработке программной платформы?
-
22-08-2019 - |
Вопрос
Я был действительно впечатлен растущим числом программных платформ, которые позволяют сторонним разработчикам вносить свой вклад в код с помощью подключаемой архитектуры (плагины / расширения).
Я изучал, на каких платформах есть лучшие сообщества плагинов...
Отличные архитектуры плагинов с процветающими сообществами плагинов:
- WordPress (и многопользовательский WordPress) для ведения блогов: 4245 плагинов
- bbPress для досок объявлений: 165 плагинов
- Firefox для браузеров: 1265 расширений
- Magento для электронной коммерции: 732 плагина
Кроме того, есть платформы с менее активными сообществами плагинов:
- MediaWiki для вики: добавочные номера 22-38?
(Для большей наглядности давайте отложим в сторону или проигнорируем платформы, которые поддерживают полноценные программные приложения, такие как Microsoft Windows, iPhone и Facebook.)
Что, по вашему мнению, дает программной платформе успешную архитектуру плагинов с большим количеством плагинов по сравнению с другой платформой с меньшим или неактивным сообществом разработчиков?
Просто для начала, вот неполный список:
- Платформа делает что-то широко полезное:давайте людям просматривать веб-страницы, покупать и продавать товары, публиковать блоги и доски объявлений и т.д.
- Платформа имеет открытый исходный код (или, как минимум, исходный код находится в свободном доступе).
- Все важные функции платформы полностью подключаются с помощью хуков и фильтров.
- Все или большинство подключаемых функций хорошо документированы (или есть wiki, чтобы разработчики могли задокументировать это для вас).
- Есть форум или список адресов электронной почты, где разработчики могут делиться плагинами и советами и хитростями
- Есть форум или список адресов электронной почты, где менее искушенные пользователи могут получить помощь в установке и настройке плагинов.
Что может сделать разработчик платформы для создания подключаемой архитектуры, которая поощряет множество внешних разработчиков создавать плагины?
Решение
Лично есть 3 основных фактора, влияющих на то, научусь ли я (и делаю ли) писать приложения для любой данной системы:
Очень ли полезна система, чтобы я хотел использовать ее настолько, чтобы у меня была достаточная мотивация для ее расширения?
Использует ли система язык, с которым я знаком, или его легко освоить в отличие от какого-либо малоизвестного, проприетарного или иным образом чрезмерно сложного решения (см. elisp)?
Является ли система плагинов чрезвычайно хорошо документированной на понятном языке, чтобы я мог приступить к работе по написанию моего плагина и не тратить часы (или дни) на расшифровку системы?
Если все это правда, то единственная причина, по которой вы не хотели бы разрабатывать для платформы, заключается в том, что кто-то другой уже написал плагины для всех ваших идей.:)
Я думаю, что также чрезвычайно полезно / важно иметь центральное и хорошо известное хранилище для размещения пользовательских плагинов (согласно вашим примерам проектов).Я ненавижу рыскать по Интернету в поисках отдельных, возможно, низкокачественных или даже, возможно, вредоносных дополнений к тому, что я пытаюсь сделать.Это должен быть веб-сайт или wiki, поскольку даже архивирование форумов или списков рассылки может раздражать и отнимать много времени.
Другие советы
Ты упускаешь главное.
JVM - это подключаемая архитектура.Каждый файл класса подключается к нему и расширяет его.
Apache - это подключаемая архитектура на нескольких уровнях.Есть такие "моды".Некоторые моды запускают другие интерпретаторы, которые сами по себе являются подключаемыми архитектурами.PHP, mod_wsgi / Python и т.д.все они подключены к Apache.
Python - это подключаемая архитектура с подключаемыми к ней файлами Python .pyc и объектными файлами (.DLL, .SO).
Каждый языковой фреймворк - это, по сути, подключаемая архитектура.
Платформа - это Фундамент
Один из взглядов на программную платформу заключается в том, что она является основой, на которую опирается другое программное обеспечение для выполнения другой задачи.Это может показаться простым и довольно очевидным утверждением, но оно очень важно.
Основы Должны Быть Простыми
Платформа должна иметь цель, и разработчики платформы должны знать об этом при разработке API, чтобы стало очевидно, каковы основные варианты использования, и API вокруг них должны быть максимально простыми в использовании с учетом способа их разработки, а также с учетом документации вокруг них.
Точки расширения Должны Быть Очевидны
Расширяемость в platoform заключается в предоставлении разработчикам возможности расширять или изменять платформу.Если это то, что вы хотите поощрять, то вам нужно очень четко разъяснить природу и ограничения этой расширяемости и предоставить четко определенный набор интерфейсов, позволяющих это.
Все это может показаться очевидным, но если вы хотите, чтобы сообщество развивалось вокруг платформы, эта платформа должна иметь применение, и ее расширение должно быть простым делом.
Извините, если это немного "ахитектурная астрономия", я действительно думаю, что высказал несколько обоснованных замечаний, вполне возможно, я высказал их неудачно, не стесняйтесь указать на это или добавить к ним
Не забывай Затмение (с >1000 зарегистрированных сторонних "плагинов" (на самом деле они состоят из еще более мелких плагинов в терминологии Eclipse)).Отчасти его успех может быть обусловлен тем, что существуют хорошие эмпирические правила о том, как разработать плагин, который также может быть расширен другими пользователями.Существует также строгая политика управления версиями API (которая, конечно, тоже имеет свои недостатки).