17 | UseCase: куда класть бизнес‑логику, как строить кейсы и хэндлеры правильно
Обсуждаем практический подход к размещению бизнес‑логики через UseCase (ю‑кейсы). Разберём: зачем нужны кейсы, как отделять запросы/репозитории/валидаторы, почему не стоит завязывать кейс на Request/Response или статические фасады, как тестировать и подменять зависимости, роль хендлеров и сервисного слоя, типичные ошибки и антипаттерны в контроллерах и сервисах. Полезно для разработчиков, стремящихся к читаемой, тестируемой и расширяемой архитектуре. Таймкоды: 00:00:03 — Введение: место бизнес‑логики в приложении 00:02:05 — Баланс требований клиента и разработчика 00:03:48 — Функциональные требования и идея ю‑кейсов 00:05:31 — Ошибки при переносе логики в сервисный слой 00:07:23 — Рекомендации по чтению: книги по дизайну 00:10:06 — Доступ к литературе и практическое обучение 00:11:42 — Чего не должно быть в UseCase: получение данных из БД 00:12:32 — Адаптация кейсов к разным фреймворкам (адаптеры) 00:13:28 — Использование кейсов в консоли и отсутствие сессий 00:15:19 — Совместимость кейсов в разных контекстах (UI, консоль, тесты) 00:16:09 — Возврат результатов и обработка ошибок (исключения) 00:17:02 — Не принимать «сырой» массив — использовать объект формы 00:18:00 — Обработка ошибок через объект формы 00:18:55 — Пример в Laravel: контроллер, UserRequest, UserForm 00:19:52 — Зависимости UseCase: репозиторий, хешер, клиент уведомлений 00:21:47 — Создание пользователя: сущность, хэш пароля, уведомление 00:22:43 — Повтор ключевых моментов MVC и UseCase 00:24:34 — Тестирование: подмена хранилищ и клиентов 00:25:28 — Быстрая разработка через модели vs репозитории 00:27:08 — MVP-подход: UserForm и модели для ускорения 00:28:23 — Переход на другую БД: когда и почему 00:29:23 — Гибкость кейсов и избегание жёсткой привязки к Request 00:31:12 — Проблемы с хардкодом идентификаторов и публичностью методов 00:32:41 — Трудности тестирования при завязке на Request 00:33:40 — «Толстые» контроллеры: признаки и как их избежать 00:37:43 — Рекомендации по созданию лёгких кейсов и прокидыванию зависимостей 00:38:24 — Валидация и большие кейсы: как дробить логику 00:39:16 — Оптимизация: разделение запросов на сохранение и обновление 00:40:17 — Клиенты: только отправка/получение данных, без БД‑логики 00:41:15 — Логирование запросов/ответов: ротация и чистка логов 00:43:13 — Избегать фасадов/статических вызовов — использовать контракты 00:45:11 — Принципы работы с моделями: геттеры/сеттеры и связи 00:46:11 — Рефакторинг legacy: когда стоит начать новый проект 00:47:45 — Хелперы vs хендлеры: разграничение ответственности 00:49:10 — SRP: клиент формирует запрос, хендлер формирует сообщение 00:50:54 — Встраивание кейсов и хендлеров: когда объединять, а когда разделять 00:51:48 — Роль хендлеров: мелкие прикладные задачи 00:53:04 — Проблемы с прокидыванием хендлеров в кейсы 00:54:16 — Альтернатива: объекты сообщений + клиенты формируют сообщение 00:55:00 — Заключение: структура кейса и однозначность функций
Обсуждаем практический подход к размещению бизнес‑логики через UseCase (ю‑кейсы). Разберём: зачем нужны кейсы, как отделять запросы/репозитории/валидаторы, почему не стоит завязывать кейс на Request/Response или статические фасады, как тестировать и подменять зависимости, роль хендлеров и сервисного слоя, типичные ошибки и антипаттерны в контроллерах и сервисах. Полезно для разработчиков, стремящихся к читаемой, тестируемой и расширяемой архитектуре. Таймкоды: 00:00:03 — Введение: место бизнес‑логики в приложении 00:02:05 — Баланс требований клиента и разработчика 00:03:48 — Функциональные требования и идея ю‑кейсов 00:05:31 — Ошибки при переносе логики в сервисный слой 00:07:23 — Рекомендации по чтению: книги по дизайну 00:10:06 — Доступ к литературе и практическое обучение 00:11:42 — Чего не должно быть в UseCase: получение данных из БД 00:12:32 — Адаптация кейсов к разным фреймворкам (адаптеры) 00:13:28 — Использование кейсов в консоли и отсутствие сессий 00:15:19 — Совместимость кейсов в разных контекстах (UI, консоль, тесты) 00:16:09 — Возврат результатов и обработка ошибок (исключения) 00:17:02 — Не принимать «сырой» массив — использовать объект формы 00:18:00 — Обработка ошибок через объект формы 00:18:55 — Пример в Laravel: контроллер, UserRequest, UserForm 00:19:52 — Зависимости UseCase: репозиторий, хешер, клиент уведомлений 00:21:47 — Создание пользователя: сущность, хэш пароля, уведомление 00:22:43 — Повтор ключевых моментов MVC и UseCase 00:24:34 — Тестирование: подмена хранилищ и клиентов 00:25:28 — Быстрая разработка через модели vs репозитории 00:27:08 — MVP-подход: UserForm и модели для ускорения 00:28:23 — Переход на другую БД: когда и почему 00:29:23 — Гибкость кейсов и избегание жёсткой привязки к Request 00:31:12 — Проблемы с хардкодом идентификаторов и публичностью методов 00:32:41 — Трудности тестирования при завязке на Request 00:33:40 — «Толстые» контроллеры: признаки и как их избежать 00:37:43 — Рекомендации по созданию лёгких кейсов и прокидыванию зависимостей 00:38:24 — Валидация и большие кейсы: как дробить логику 00:39:16 — Оптимизация: разделение запросов на сохранение и обновление 00:40:17 — Клиенты: только отправка/получение данных, без БД‑логики 00:41:15 — Логирование запросов/ответов: ротация и чистка логов 00:43:13 — Избегать фасадов/статических вызовов — использовать контракты 00:45:11 — Принципы работы с моделями: геттеры/сеттеры и связи 00:46:11 — Рефакторинг legacy: когда стоит начать новый проект 00:47:45 — Хелперы vs хендлеры: разграничение ответственности 00:49:10 — SRP: клиент формирует запрос, хендлер формирует сообщение 00:50:54 — Встраивание кейсов и хендлеров: когда объединять, а когда разделять 00:51:48 — Роль хендлеров: мелкие прикладные задачи 00:53:04 — Проблемы с прокидыванием хендлеров в кейсы 00:54:16 — Альтернатива: объекты сообщений + клиенты формируют сообщение 00:55:00 — Заключение: структура кейса и однозначность функций
