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-фреймврока потребовал бы значительно больше усилий на его изучение и замедлил бы разработку за счёт намного большего количества кода на фронте и необходимости переключаться между двумя проектами.