Бизнес-логика — где живёт
Идеал по DDD: единая изолированная бизнес-логика, переиспользуемая на фронте и бэке. Реальность: ~80% логики действительно общая, но часть живёт ближе к данным (в БД), часть — ближе к пользователю (UI-валидации).
Три уровня размещения логики
- Фронтенд — мгновенный UX, валидации, форматирование.
- Бэкенд — авторитативные проверки, бизнес-процессы.
- БД — хранимые процедуры, триггеры, вьюшки. Десятки/сотни раз быстрее, чем дёргать СУБД из приложения.
Почему логика в БД эффективна
- Хранимая процедура → план исполнения, оптимизированный СУБД.
- Близко к данным в оперативке СУБД — нет round-trips.
- СУБД собирает статистику и переоптимизирует план.
Признаки неправильного размещения
- Валидации продублированы во всех трёх слоях, расходятся.
- Бэкенд тащит всю таблицу в Node чтобы JS-кодом отфильтровать — БД сделала бы это в 100× быстрее.
- Фронт пишет SQL — нет.
- Бизнес-логика только на фронте → клиент может обойти.
Пример: общая логика домена
// shared/domain/order.js — работает и на фронте, и на бэке
export function calcDiscount(order, user) {
if (user.tier === 'vip') return order.total * 0.2;
if (order.total > 10000) return order.total * 0.05;
return 0;
}
Антипаттерн: дублирование
// фронт
if (price > 1000) discount = price * 0.1;
// бэк
if (price > 1000) discount = price * 0.1; // дубль, разойдётся
// БД
CREATE TRIGGER … IF price > 1000 THEN discount := 0.1; // ещё один дубль
🎓 Источники
- 🎓 [Weekly call #226 — Бизнес-логика на frontend, backend и в БД] · 2025-10-17 · YouTube
- «~80% логики общая. По чистой архитектуре, по DDD — нужно стремиться к цельной логике».
- Альтернативная позиция: «Логика в БД — в десятки/сотни раз быстрее. СУБД — это сервер приложений: данные и логика в одном пространстве». Контр-консенсус: индустрия выносит логику из БД утверждает это ошибкой производительности.
- 🎓 [DDD в JS/TS — где размещать бизнес-логику] · 2025-10-03 · YouTube
- Репозиторий возвращает entity, перекладывая из «бесформенных» структур БД.
- 🎓 [Metarhia Weekly #192 — стыковка DDD фронт+бэк] · 2025-03-01 · YouTube
- Local-first: домен на клиенте + реактивная локальная СУБД.