Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама
Посібники 13 серпня 2026

Dependency Injection - явні залежності

Dependency Injection передає об'єкту його залежності ззовні, замість того щоб він створював їх сам.

Яку проблему вирішує

Коли клас сам створює залежності через new чи тягне їх через app(), він жорстко прив'язується до конкретних реалізацій. Підмінити їх у тестах або замінити одну на іншу стає важко, а справжні залежності класу приховані.

Як вирішує

Залежності оголошуються в конструкторі через інтерфейси й передаються ззовні. У Laravel це робить контейнер з автозв'язуванням: він сам резолвить і підставляє потрібні реалізації за конфігом біндингів.

interface CacheStore
{
  public function get(string $key): mixed;
}

class RedisStore implements CacheStore
{
  public function get(string $key): mixed
  {
    return null;
  }
}

app()->bind(CacheStore::class, RedisStore::class);

class ReportService
{
  public function __construct(private CacheStore $cache) {}
}

Де застосовувати

  • Практично всі сервіси й класи з зовнішніми залежностями - це базовий підхід у Laravel.
  • Коли реалізацію треба підмінювати у тестах або міняти за конфігом.

Плюси та мінуси

  • + Залежності явні та керовані; тести легко підставляють фейки.
  • + Реалізації міняються в одному місці - у біндингах контейнера.
  • − Зловживання інтерфейсами на кожен клас додає зайвого шуму.
  • − Краще інжектувати через конструктор, а не тягнути app() усередині - інакше залежності знову ховаються.
42

Ця стаття - частина серії

Патерни проєктування

26 / 34

  1. 1 Abstract Factory - сімейства об'єктів
  2. 2 Builder - поетапна побудова об'єктів
  3. 3 Factory Method - вибір створення
  4. 4 Prototype - швидке клонування
  5. 5 Singleton - один екземпляр
  6. 6 Adapter - узгодження інтерфейсів
  7. 7 Bridge - відокремлення абстракції
  8. 8 Composite - дерево об'єктів
  9. 9 Decorator - middleware як обгортка
  10. 10 Facade - спрощений доступ
  11. 11 Flyweight - спільні легкі об'єкти
  12. 12 Proxy - контроль доступу і кеш
  13. 13 Chain of Responsibility - ланцюжок обробників
  14. 14 Command - інкапсуляція дії
  15. 15 Interpreter - обробка власних правил
  16. 16 Iterator - контроль обходу
  17. 17 Mediator - координація взаємодії
  18. 18 Memento - збереження стану
  19. 19 Observer - реакція на події
  20. 20 State - поведінка залежно від стану
  21. 21 Strategy - вибір поведінки
  22. 22 Template Method - спільний алгоритм
  23. 23 Visitor - операції над структурами
  24. 24 Repository - доступ до даних
  25. 25 Service Layer - бізнес-логіка в одному місці
  26. 26 Dependency Injection - явні залежності
  27. 27 DTO - передача даних без логіки
  28. 28 MVC / MVP / MVVM - архітектурні підходи
  29. 29 CQRS - розділення читання і запису
  30. 30 Event Sourcing - події як джерело істини
  31. 31 Unit of Work - узгоджені зміни
  32. 32 Specification - правила як об'єкти
  33. 33 Pipeline - послідовна обробка
  34. 34 Null Object - поведінка за замовчуванням

Читати в документації

Коментарі

Увійдіть, щоб залишити коментар

Будьте першим, хто залишить коментар!

Читайте також

Патерн Null Object
Посібники 10 вересня 2026
Патерни проєктування

Null Object - поведінка за замовчуванням

Замінює null безпечним об'єктом із тим самим інтерфейсом і "порожньою" поведінкою. Прибирає перевірки на null - і де він може приховати справжню проблему.

14

Вакансії за темою

Bewort Нова
Сьогодні

AI-Driven PHP Developer

Розробник бекенду на PHP/Laravel для платформи охорони здоров'я (кредентиалінг, комплаєнс, стафінг, автоматизація робочих процесів). Завдання: проєктування REST API та масштабованої архітектури, робота з PostgreSQL, асинхронні черги (AWS SQS, RabbitMQ, Kafka), участь у AI-автоматизації та розробка краулерів. Вимоги: 4+ років бекенд або фулстек досвіду, сильний Laravel, продуктове мислення, англійська B2+.

Full Stack Developer (middle+)

Full Stack розробник розвиватиме та підтримуватиме вебпродукти FinTech-компанії: доопрацьовуватиме backend і frontend, функціонал особистого кабінету клієнта, інтеграції через REST API з платіжними та ідентифікаційними сервісами. Ключовий стек: PHP, Laravel, Vue.js (Vue Router, Pinia або Vuex), MySQL/PostgreSQL, Docker, Git. Вимоги: понад 3 роки комерційного Full Stack досвіду, робота з наявним кодом, участь у code review та розборі інцидентів.

Intobi Нова
Вчора

Full-Stack Developer PHP+Angular

Розробник повного стеку, який створює та підтримує функціонал на Angular (TypeScript) і PHP, проєктує й інтегрує REST/GraphQL API та оптимізує роботу з реляційними базами даних. Вимоги: досвід PHP 8+ з Laravel або Symfony, впевнене володіння Angular, RxJS і управлінням станом, знання MySQL/PostgreSQL, Git і CI/CD. Очікується активне використання AI-агентів (Claude Code) у щоденній роботі та участь у код-рев'ю.

Пакети за темою

Bagisto

bagisto/bagisto

Bagisto — це платформа для електронної комерції, побудована на Laravel. Вона надає готове рішення для створення та управління інтернет-магазинами з підтримкою каталогу товарів, замовлень, платежів та клієнтів.

28,228 v2.5.0 13 26

Lang

laravel-lang/lang

Список 126 мов для Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova, Laravel Spark та Laravel UI.

7,779 15.37.4 12