Сергей Удалов

Сомнение важнее согласия

Инструменты пользователя

Инструменты сайта


информационные_технологии:архитектура_приложения

Архитектура приложения

Приложение должно строиться в согласии с принципами «Чистая архитектура».

 Чистая архитектура

Уровень Entities должен быть общим для всех модулей, так как содержит общие правила. Каждый модуль должен насквозь проходить через все уровни.

 Модули приложения в "Чистой архитекторе"

Ruby

Рассмотрим монолитное приложение, которое разбито на модули и готово к разделению на сервисы (микросервисы), которые будут запускаться отдельно. Наряду с принципами «Чистая архитектура» будем применять подход «Кричащая архитектура».

На верхнем уровене расположены:

  • apps
  • entities
  • external

Entities

Enterprise Business Rules. Общая бизнес-логика, объединена в gem. Находится в папке entities. После разделения приложения на несколько - будет выделена в отдельный репозиторий и подключаться как gem-библиотека из репозитория, например rubygems.

Applications (apps)

Application Business Rules. Модули приложения, используют entities: подключают как gem.

External

Приложение, которое инициализирует и запускает модули с их Use Cases. Например, это может быть Rails-приложение, которое подключает модули из apps, как gem-ы

Структура

Учитывая эти принципы можно предложить следующую структуру приложения.

  • entities (gem)
    • lib
      • post.rb
      • user.rb
    • test
  • external
    • web
    • api
    • worker
  • modules
    • module_1 (gem)
      • external
        • web (rails/hanami/sinatra)
          • app
          • config
          • test
        • api (grape)
        • worker (sneakers/sidekiq)
      • lib
        • adapters
          • repositories
          • presenters
          • gateways
        • posts_publisher.rb
        • user_athunticator.rb
        • … (и другие use cases)
      • test
    • module_2 (gem)

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
 
информационные_технологии/архитектура_приложения.txt · Последние изменения: 09.12.2019 05:48 — sergeiudalov