Месяцами я рассказывал про принципы. Теперь — сам фреймворк. На этой неделе DartWay публикуется пакет за пакетом, с разбором каждого. Сегодня — общая картина.
Проблема: Flutter-разработчик умеет делать экраны. Дальше — стена: сервер, БД, миграции, эндпоинты, авторизация, права, реалтайм. Стандартный ответ — «возьми Firebase/Supabase». Удобно, но чужая база, чужие модели, чужой язык и потолок там, где начинается настоящая бизнес-логика.
Ответ DartWay: единый декларативный слой данных от базы до виджета.
На сервере фича описывается конфигом:
// кто читает
accessFilter: (user, model) => user.id == model.ownerId
// кто пишет
allowSave: (user, model) => user.role == 'admin'
// валидация
validateSave: (model) => model.amount > 0
// в той же транзакции
beforeSaveTransaction: (model, tx) => tx.createAuditLog(model)Эндпоинтов не существует.
На клиенте — одна строка:
ref.watchModelList<Booking>()Типизированный живой список. Реалтайм-синхронизация, пагинация, фильтры, скелетоны загрузки — из коробки. Кто-то записал модель на сервере — виджет перестроился. Никаких сокетов руками, никаких инвалидаций кэша.
Фича целиком — от таблицы в БД до живого экрана — ~40 строк конфига и виджет.
Формула: Serverpod даёт бэкенд. DartWay убирает необходимость его писать.
---
Структура: 9 пакетов, 3 круга
🔹 Ядро (4 пакета) — модуль Serverpod: generic CRUD для любой модели с реалтайм-подписками, декларативные конфиги доступа/валидации, беспарольная авторизация по телефону, S3/MinIO, алерты об ошибках. Клиентская часть:
watchModelList, сессии, переживающие рестарт, умная обработка ошибок.🔹 Тулбокс приложения — скелет, который каждый раз пишут заново: запуск/сплэш, контракт асинхронных состояний, защищённые действия (двойной тап ≠ две записи), пайплайн уведомлений. Принцип: фреймворк не поставляет дизайн-систему. Никаких
DwButton. UI-кит приезжает исходником — и дальше он твой.🔹 Обвязка — CLI (
dartway create — проект за секунды), линты/чекер конвенций, опционально Telegram Mini Apps, мост в DartWay Studio.---
Три принципа, на которых всё держится
1. Фреймворк не владеет моделями. Твой
UserProfile — в твоей базе, с твоими полями и ролями. Не «расширь наш UserInfo», не форк модуля. Чужую модель не расширить — форк тащится через каждое обновление.2. Secure by default. Модель без описанного доступа — никому не отдаётся. Не «открыто, пока не закрыл» — а «закрыто, пока не открыл». Забыть закрыть можно, забыть открыть — нельзя.
3. Архитектуру проверяет машина. Конвенции + линты + чекер + скиллы для ИИ-агентов. Агент в проекте с машинно-проверяемыми правилами не разваливает его на третьей фиче. Ради этого всё и затевалось.
---
Что дальше
С завтрашнего дня — пакеты на pub.dev и разбор каждого. Первым — серверное ядро: фича без единого написанного эндпоинта.
А в субботу, 18 июля, в 14:00 МСК соберу работающее приложение вживую — за 90 минут, из пустой папки: сервер, база, реалтайм, авторизация. Бесплатно, запись будет.
Полную новость читайте здесь
FlutterPulse — канал о мире Flutter!
#flutter #dart #FlutterPulse #FlutterPulseNews #dartway_dev_ru #serverpod #backend #architecture