Держит бизнес-решение в коде, который не импортирует веб-фреймворк
Зачем
Зачем это нужно
Вводит интерфейс только на внешней границе, которую действительно подменяют
Сохраняет короткий путь чтения кода без пустых DTO на каждом шаге
Вопросы
Частые вопросы
Нужен ли интерфейс для каждого класса?
Нет. Интерфейс полезен на границе изменчивой внешней зависимости или нескольких реализаций. Интерфейс над чистой функцией с одной реализацией добавляет навигацию без гибкости. Модель отметит базу, часы, очередь и внешние клиенты, а внутренние вычисления оставит обычным кодом.
Куда помещать валидацию?
Формат входа проверяет транспортный слой, а бизнес-инварианты — доменная или прикладная логика. Неверный JSON и запрещённая скидка являются разными ошибками. Модель разделит их и не позволит правилу зависеть от конкретного класса запроса фреймворка или кода HTTP.
Как не утонуть в преобразовании моделей?
Не создавайте новую форму данных на каждой функции. Отдельная модель оправдана, когда меняется ответственность или контракт границы. Модель проследит путь одного сценария и удалит перекладки, которые ничего не защищают, сохранив преобразование между внешним форматом, доменом и хранением.
Рядом
Соседние страницы каталога
Дальше — весь каталог задач: поиск по названию, темы и фильтры.