Trainer Advisor - архитектура и стэк
March 20, 2024
В этом микропосте я для галочки опишу архитектуру и стек Trainer Advisor.
Проект по сути своей является простым - я его делаю один, у него не предполагается супер динамичного пользовательского интерфейса, пользовательская база сейчас состоит из одного человека, а в самых безбашенных мечтах она не превысит нескольких тысяч человек.
Исходя из этого я выбрал самую простую из возможных архитектур - монолит поверх реляционной СУБД с серверным рендерингом HTML-страниц.
Со стеком я тоже решил ничего не выдумывать и взять то, что умею готовить (либо то, что проще всего научиться готовить):
- СУБД: PostgreSQL;
- Хранилище BLOB-ов: Minio;
- Язык: Kotlin/JVM;
- Веб-фреймворк: Spring MVC;
- Работа с БД
- Фреймворк: Spring Data JDBC;
- Библиотека миграций схемы: Flyway;
- UI:
- HTML/CSS;
- Twitter Bootstrap 5;
- Vanilla JS.
- htmx - коммуникация (навигация и отправка форм) с сервером без полной перезагрузки страницы;
- Alpine.js - минимальная динамика UI (например, динамический список шагов на форме создания упражнения).
- Тестирование:
- Фреймоврк: JUnit 5;
- Библиотека HTTP-запросов: RestAssured;
- Библиотека ассёртов: Kotest;
- Библиотека моков: Mockito;
- Инструмент деплоя - Docker Compose.
И сейчас, сделав MVP с:
- клиентами, их журналом и файлами;
- упражнениями;
- программами (+генерация в docx формате);
- приёмами (с отображением в виде кастомного календаря).
за 8 человеко-недель (312 человеко-часов) на всё (аналитика, бэк, фронт, тестирование) - я считаю, что с выбором не ошибся.
Выбранный стек благополучно справился со всеми задачами, а
- любой другой выбор технологий для бэка потребовал бы значительных усилий на их изучение;
- выбор SPA-фреймврока потребовал бы значительно больше усилий на его изучение и замедлил бы разработку за счёт намного большего количества кода на фронте и необходимости переключаться между двумя проектами.