Первоначальная организация кодовой базы строится вокруг сущностей базы данных.
С ростом монолита возникает дихотомия между данными и сервисами: данные стремятся быть общими, в то время как сервисы должны соблюдать инкапсуляцию.
Правильным шагом является отделение данных от сервисов и построение модульного монолита.
Например с использованием принципов DDD в домене должны быть выделены контексты и агрегаты, которые будут являться границами сервисов и модулей.
Предположим требуется создать систему для демонстрации работы счетчика целых чисел и асинхронных операций, при этом пользователю требуется REST API и документация. Также асинхронные операции должны выводить последнее значение счетчика.
- Фреймверки: Play2 2.8.15, Guice, Twirl
- ЯП: Scala
- Idea: IntelliJ
- Git
- domain - доменные модули
- async - модуль асинхронных операций
- counter - модуль счетчика целых чисел
- api - общие протоколы для межмодульного взаимодействия, автогенерация моделей рутов
- models - общие модели данных
- inf - инфраструктура
- common - модуль утилит и расширений
- uiCommon - модуль UI для компонентов, layouts Play2 шаблонов
- apps - хосты для запуска модулей
- main - web-сервер для REST API
- admin - web-сервер для HTML-документации
- scripts - sbt-скрипты запуска