Модульность и расширение

В данном разделе вы узнаете, как создавать модульные и расширяемые системы с помощью Jmix.

Разделение сложной системы на набор компонентов делает ее более управляемой и позволяет повторно использовать функциональность. Например, создавая, скажем, User Management в виде отдельного компонента, вы можете делегировать его внедрение и обслуживание отдельной команде. Также его можно использовать в нескольких приложениях, созданных в вашей организации, поскольку, скорее всего, они имеют одинаковые требования в этой области.

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

Подсистемы, дополнения и модули

Так как слово «компонент» перегружено смыслами, то в контексте модульности Jmix мы будем использовать более конкретный термин — подсистема. Подсистема — это отдельный компонент приложения Jmix, предоставляющий некоторую функциональность. Существует две категории подсистем:

  • Основные подсистемы обеспечивают функциональность системного уровня и включены в большинство проектов.

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

Ниже представлена возможная структура приложения, использующего основные подсистемы, общедоступное дополнение Reports и пользовательское дополнение User Management:

subsystems.drawio

Мы будем использовать термин модуль в том же значении, что и в IDE. Модуль — это набор файлов исходного кода и параметров сборки, которые собираются и упаковываются в один файл JAR.

Подсистема Jmix состоит из одного или нескольких функциональных модулей, каждый из которых сопровождается стартовым модулем Spring Boot.

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

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

Расширяемые приложения

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

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

Другая возможность — создание приложений, которые можно настроить для конкретной отрасли или клиента без модификации исходного продукта. Для этого вам нужно вынести основной функционал приложения в дополнение, а модуль приложения использовать как легкий запускающий (runner) модуль.

Ниже представлена структура расширяемого приложения:

original app.drawio

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

customized app.drawio

Настраиваемый проект приложения содержит только функциональные возможности расширения, дополнение Application используется как зависимость и не изменяется.