Проблема: у класса появляется очень много зависимостей. `class OrderService { protected $mailer; protected $logger; protected $repository;
public function __construct($mailer, $logger, $repository) { $this->mailer = $mailer; $this->logger = $logger; $this->repository = $repository; }
// ... } Проблема усугубляется, когда у исходного класса появляется целая куча наследников. Одно из решений, чтобы немного упростить работу: `class Dependencies { public $mailer; public $logger; public $repository;
public function __construct($mailer, $logger, $repository) { $this->mailer = $mailer; $this->logger = $logger; $this->repository = $repository; } }
class OrderService { protected $deps;
public function __construct(Dependencies $deps) { $this->deps = $deps; }
// ... } В симфони приложении для тех же целей можно использовать https://symfony.com/doc/current/service_container/service_subscribers_locators.html#the-autowirelocator-attribute
В golang похожий подход использует dig. https://pkg.go.dev/go.uber.org/dig#hdr-Parameter_Objects
Резюме: Имхо, как временное решение - пойдёт. Но пахнет увеличивающимся техническим долгом и заметанием мусора под ковёр. Если класс и его иерархия начали тянуть по 20 зависимостей - надо начинать декомпозицию в независимые сервисы.``
· 20.08.2025
Имхо, это плохое решение. Во-первых Dependencies, в таком случае, сам становится зависимостью, притом с очень большой ответственностью. Как следствие - невозможно удалить зависимость из сервиса, потому что Dependencies использует эту зависимость где-то ещё. Во-вторых, придётся работать через прослойку, что осложняет разработку. Можно и в-третьих наверняка найти, но два пункта уже весомые, чтобы от этой идеи отказаться. Самого языка не знаю, наверное это PHP, однако саму проблему я не понял. Если у OrderService появились наследники, то все зависимости что нужны только ему делаем private. Что нужны ему и его потомкам - protected. Таким образом не будет проброса лишних зависимостей вниз по иерархии наследования. Поправьте меня, если не так понял.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён