Как писать production-приложения без лишнего кода: зачем нужны декларативные full-stack фреймворки
Как строить продакшн-приложения без лишнего кода: декларативные full-stack фреймворки
Современная веб-разработка слишком усложнилась. Чтобы запустить простой CRUD-приложение, приходится настраивать REST API, state management, ORM и сборку. А можно ли обойтись без всего этого?
Почему традиционный подход стал неудобным
Сегодня при создании приложения с базой данных приходится принимать множество решений ещё до того, как напишешь первую строчку логики:
- Какой ORM выбрать и как он будет работать с фреймворком
- Как организовать API — через REST, GraphQL или кастомные эндпоинты
- Как управлять состоянием на фронтенде
- Как настроить аутентификацию и права доступа
- Нужен ли TypeScript и какой сборщик использовать
Каждый выбор добавляет лишнюю нагрузку и риск ошибок. При этом большинство решений уже давно известны — мы просто заново их повторяем.
Декларативная full-stack архитектура
Представьте фреймворк, где вся конфигурация приложения описывается в одном месте: модели данных, связи между ними, API, UI-компоненты и права доступа. Никакого разрыва между фронтендом и бэкендом. Один язык, одна парадигма.
Это и есть суть декларативных full-stack фреймворков — они оставляют только существенную сложность, всё остальное берут на себя.
Что такое существенная сложность
Существенная сложность — это то, что действительно нужно решить: бизнес-логика, отношения между данными, специфические требования. Все остальное — случайная сложность.
Хороший фреймворк её убирает, если:
- Использует один объектно-ориентированный язык для основной логики
- Автоматически генерирует API из модели данных
- Предлагает реактивный UI, синхронизированный с данными
- Управляет правами на уровне базы данных
- Позволяет разворачивать приложение без долгой сборки
Как устроена такая архитектура
Бэкенд: Python с мощным ORM
Бэкенд использует ORM вроде SQLAlchemy, который не прячет SQL, а делает его проще через Python. Такое решение дает:
- Полный доступ к SQL, когда это needed
- Композируемые и проверяемые запросы
- Поддержку наследования в модели данных
- Хуки для валидации и сложной логики
- Реляционную БД как единственный источник истины
Фронтенд: реактивные компоненты
UI не является отдельной частью. Он связан с модели данных и бэкендом напрямэму и реакivно реагирует на изменения.