Какие ресурсы лучше всего использовать, если вы хотите создать приложение с модульностью?[закрыто]

StackOverflow https://stackoverflow.com/questions/413247

  •  03-07-2019
  •  | 
  •  

Вопрос

В моем анализе новых веб-платформ / приложений, таких как Drupal, Wordpress и Salesforce, многие из них создают свое программное обеспечение на основе концепции модульности:Где разработчики могут создавать новые расширения и приложения без необходимости изменять код в "базовой" системе, поддерживаемой ведущими разработчиками.В частности, я знаю, что Drupal использует систему "hook", но я мало что знаю о движке или дизайне, который ее реализует.

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

Я знаю, что некоторые люди указывают непосредственно на ООП, но, похоже, это не совсем одно и то же.

Эта конкретная система, которую я планирую, больше похожа на что-то вроде Salesforce, но это не CRM-система.

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

Это было полезно?

Решение

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

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

Другой способ - предложить API, который может быть вызванным соответствующими сторонами и сделайте так, чтобы приложение передавало управление коду, расположенному в другом месте (a la Facebook apps), или сделайте так, чтобы приложение работало так, как позволяют разработчику команды API (a la Google Maps).

Несмотря на то, что механизмы различаются и способы их реальной реализации различаются, вы в любом случае должны определить

  • Какую свободу я предоставлю пользователям?
  • Какие услуги я буду предлагать программистам для настройки приложения?

и самое главное:

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

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

function renderBackground() {
    foreach (Plugin p in getRegisteredPlugins()) {
        if (p.rendersBackground) p.renderBackground();
    }
    //Standard background code if nothing got executed (or it still runs, 
    //according to needs)
}

В этом случае у вас есть хук 'renderBackground', который плагины могут реализовать для изменения фона.

С помощью API пользовательское приложение будет вызывать вашу службу, чтобы получить фоновую визуализацию

//other code
Background b = Salesforce2.AjaxRequest('getBackground',RGB(255,10,0));
//the app now has the result of calling you

Все это также связано с Голливудский принцип, что хорошо применять, но иногда это просто непрактично.

Другие советы

Шаблон плагина из P EAA , вероятно, то, что вы ищете. Создайте публичный интерфейс для вашего сервиса, в который плагины (модули) могут интегрироваться в ad-hoc во время выполнения.

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

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

и многое-многое другое!

Если вы размещаете приложение, опубликуйте (и собачью еду) RESTful API.

Если вы распространяете программное обеспечение, посмотрите OSGi .

Вот небольшое видео, которое, по крайней мере, даст вам несколько советов; Процесс Lego [менее 2 минут]

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

Самый важный ключевой элемент создания модульного программного обеспечения - помнить, что это [главным образом] вопрос того, насколько слабо связаны вы можете создавать свои системы. Чем более слабо связаны, тем проще модульность ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top