Статьи

Масштабирование вашего внешнего интерфейса

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

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

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

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

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

Чтобы настроить проект локально, вам нужно иметь последнюю версию Node.js и глобально установить yarn and gulp.


Вам также может понравиться:
Основы Redux .

Как только это будет сделано, запуска gulpдостаточно для настройки всей инфраструктуры проекта. Чтобы упростить его настройку и демонстрацию из одного места, я поместил три модуля в один репозиторий GitHub. Хотя в сценарии из реальной жизни они будут разбиты на три отдельных хранилища. 

Модульная архитектура

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

  • Смотрите домашнюю страницу с некоторой базовой информацией о сайте (Главная) Главная страница
    Главная страница
  • Просмотр пользователей (Пользователь)Страница пользователя
    Страница пользователя
  • Добавить новых пользователей (Admin) Страница администратора
    Страница администратора
  • Предоставить / отозвать разрешения, позволяющие отдельным пользователям удалять пользователей или скрывать / показывать страницу администратора (Настройки)

    • Когда разрешение «разрешить удаление пользователей» включено, на странице пользователя появляется значок корзины.
    • Когда «разрешить просмотр страницы администратора» отключено, навигация по «Администратору» исчезает.
      Установка прав администратора
      Установка прав администратора

Страницы «Домой» и «Пользователь» объединяются с основным приложением, а две другие загружаются во время загрузки системы.

Во-первых, нам нужно сконфигурировать наш бэкэнд для чтения метаданных о наших основных модулях и предоставления API для загрузки. В этом проекте мы создали папку   “modules”  для этого . Здесь скомпилированные модули, готовые к загрузке, распространяются. 

Единственный файл, созданный вручную modules-metadata.json. Опять же, это сделано для простоты. В реальном сценарии он будет внутри каждого модуля, как   modules/admin/metadata.json с фрагментом


JSON