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

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

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

26 / 30

  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 - події як джерело істини

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

Коментарі

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

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

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

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

Alliance Digital Нова
Сьогодні

PHP Developer

Middle PHP-розробник для фінтех-продукту. Розробка backend на Laravel з PostgreSQL, RabbitMQ, Redis. Реалізація складної бізнес-логіки кредитування, фінансових операцій, зовнішніх інтеграцій. Вимоги: 3+ років PHP, впевнена робота з Laravel, OOP/SOLID, складна бізнес-логіка, PostgreSQL, черги, тестування, production-mindset.

Hurma System Tech Нова
Сьогодні

Full Stack Developer (PHP, Laravel, Vue.js)

Full Stack Developer на PHP та Laravel з фронтенд-частиною на Vue.js. Розроблення та рефакторинг функціоналу HR-системи, робота з БД, REST API, тестування. Вимоги: PHP 8+, 2+ років Laravel, Vue.js, OOP, SQL, Git, базовий TypeScript. Віддалена робота з гнучким графіком.

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

Middle+ PHP Developer (with DevOps)

Middle+ PHP Developer з DevOps-експертизою для мультикоманди, що розробляє CRM та освітню платформу. Основна роль: проєктування й реалізація модулів на PHP 8 і Laravel, оптимізація під високе навантаження, розробка інтеграцій. DevOps-компонент: налаштування CI/CD, контейнеризація (Docker/Kubernetes), управління AWS-інфраструктурою. Вимоги: глибока експертиза Laravel, Docker, Kubernetes, Git, технічна англійська.

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

Bagisto

bagisto/bagisto

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

27,987 v2.4.10 12 21

Lang

laravel-lang/lang

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

7,776 15.34.3 10