Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама
Посібники 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() усередині - інакше залежності знову ховаються.
43

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

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

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 - і де він може приховати справжню проблему.

16

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

Intetics Нова
Вчора

Senior Full-Stack PHP Developer (Laravel + React/Vue)

Senior Full-Stack PHP розробник створює й підтримує масштабовані веб-застосунки: бекенд на Laravel та фронтенд на React або Vue. Відповідає за архітектурні рішення (дизайн сервісів, моделювання даних, кешування, черги), проєктує REST API та інтеграції, рефакторить legacy-код і оптимізує запити. Вимоги: 5+ років досвіду з сучасним PHP 8.x, 3+ роки з Laravel, 3+ роки з React або Vue, сильний TypeScript, досвід з Redis і чергами, автотести та CI/CD.

AirAdvisor Нова
2 дні тому

PHP Laravel Full Stack Developer with jQuery and JavaScript

Full stack розробник на PHP з фокусом на Laravel: backend-сервіси, веб-застосунки та інтеграція фронтенду на Bootstrap або Tailwind CSS, jQuery і JavaScript. Потрібна робота з MySQL у високонавантажених середовищах, кешування та черги (Redis, Memcached, RabbitMQ), підтримка legacy PHP без фреймворків і міграція на сучасні фреймворки. Вимоги: значний досвід PHP, побудова та масштабування API для high-traffic застосунків, знання HTML, CSS, JavaScript. Віддалена робота, оформлення через B2B або ФОП

King Group Нова
2 дні тому

Middle PHP developer

Розробник PHP middle-рівня для високонавантаженої веб-платформи Social Casino/Online Casino, яка активно масштабується. Основний стек: PHP 7.4, Symfony 4, Yii, PostgreSQL 14, Redis, RabbitMQ, NGINX; частина сервісів переходить на мікросервіси на Symfony. Вимоги: 3-4+ роки продуктового досвіду з PHP, Yii або Symfony, PostgreSQL, розуміння REST API, досвід роботи з Git, знання ООП і SOLID. Буде плюсом досвід з брокерами повідомлень і DDD.

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

Kalimera

welldigit/kalimera

Interactive installer that scaffolds Laravel applications the Well Digit way.

v1.0.0 15

Bagisto

bagisto/bagisto

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

28,267 v2.5.0 13 26