Внедрение зависимостей без магии
Передавайте сервису необходимую зависимость, а не позволяйте ему искать глобальный контейнер.
new CheckoutService($orders, $payments, $clock)Конструктор
Обязательные зависимости видны сразу и объект нельзя создать в недействительном состоянии.
Composition root
Конкретные реализации связываются в одном месте приложения. Доменный код не импортирует PDO-конфигурацию или HTTP-клиент.
Тест
Подставьте маленькую реализацию интерфейса в памяти и проверяйте сценарий без сети и базы.
Ошибка
Service Locator и статический singleton скрывают контракт и связывают тесты общим состоянием.
Связанные материалы
Источники и проверка
Последняя содержательная проверка: . Автор-разработчик Михаил Каржин. Методика качества контента.