Позиція «фреймворк - деталь» (чиста архітектура): бізнес-логіка не повинна знати про Laravel. Ніяких моделей Eloquent, фасадів, хелперів у ядрі - лише чисті PHP-класи, інтерфейси й DTO, а фреймворк лише доставляє запити й зберігає дані.
Позиція Laravel-спільноти: фреймворк - не деталь, а інструмент продуктивності. Eloquent, фасади, черги, події дають швидкість розробки саме завдяки тісній інтеграції. Абстрагування від них - це подвоєння коду заради заміни, яка ніколи не станеться.
Що коштує повна ізоляція:
- окремі доменні сутності й Eloquent-моделі + відображення між ними;
- репозиторії-обгортки над Eloquent з інтерфейсами;
- DTO на кожній межі;
- втрата зручностей (зв'язки, ліниве завантаження, події моделей,
toResource()); - новим людям складніше: «Laravel-проєкт» не схожий на Laravel.
Що вона дає:
- бізнес-правила тестуються миттєво, без бази й контейнера;
- складна предметна область (фінанси, страхування, логістика) не тоне в інфраструктурному коді;
- довговічність: ядро переживає великі оновлення фреймворку.
Прагматичний середній шлях, що працює в більшості проєктів:
- дії (actions) чи сервіси для сценаріїв - бізнес-логіка не в контролерах, моделях чи Livewire-компонентах;
- Eloquent лишається доменною моделлю - Active Record з методами домену (
$order->cancel()), скоупами й кастами; - ізолювати зовнішні системи, а не власну базу: інтерфейси для платежів, SMS, сторонніх API - тут заміна й фейки реально потрібні;
- value objects і енуми для доменних понять (гроші, статуси, діапазони дат);
- arch-тести на напрям залежностей (домен не імпортує
Illuminate\Http); - фасади - за потреби, з розумінням, що в тестах вони підміняються (
Mail::fake()).
Критерій вибору: складність предметної області порівняно з технічною. CRUD-адмінка, каталог, блог - Laravel-шлях. Складні правила з багатьма інваріантами й довгим життям - більше ізоляції, хоча б для ядра цієї частини (модульний моноліт, де лише складний модуль має «чисту» архітектуру).
Найгірший варіант - половинчастий: інтерфейси репозиторіїв, що повертають моделі Eloquent, і «сервіси», що лише проксюють виклики. Складність є, а користі немає.