Как предотвратить «обновление» экземпляра повсеместно в большой кодовой базе?

Я работаю с действительно большой кодовой базой с сотнями разных классов. У нас изначально был главный Application.php где мы вроде загрузили наш services, То есть, вот где мы подключили зависимости друг к другу, примерно так:

public function loadConfig(ConfigLocatorInterface $config)
{
$this->config = new Config($config);
}

И т.д. Вы, наверное, поняли, что существует множество таких экземпляров, которые могут даже принимать 2 или более зависимостей или объекты, которые уже имеют зависимости.

По пути это становится непригодным, потому что вам постоянно приходится проходить эти serviceproviders вокруг других объектов, вашего контроллера, вашего пула соединений и т. д.

По этой причине мои коллеги-разработчики начали создавать экземпляры объектов в самих классах вместо того, чтобы передавать их по цепочке, создавая тесную связь. Четное newing объекты внутри конструкторов, что делает практически невозможным unit test эти кусочки кода.

Постоянная передача этих зависимостей может не быть решением в этом случае, так как многие конструкторы уже имеют 3 или около того аргумента. И если бы мы сделали это, нам пришлось бы создавать куски предварительно сконфигурированных объектов, что не всегда возможно.

Контейнер казался возможным решением, но за это проголосовали из-за опасений по поводу утечки данных конфигурации из контейнера и их отображения в стеке вызовов или где-то еще. Помимо того, что мои коллеги-разработчики обеспокоены, это может превратиться в раздутый 'god-object' где мы в значительной степени сбрасываем все, что нам нужно, что мы не хотим постоянно пропускать.

Я на этом сообразил, и хотя это не простой технический вопрос, мне интересно, как вы, ребята, справляетесь с этим лично. Я надеюсь, что это жизнеспособный вопрос, иначе я найду где-нибудь еще, чтобы опубликовать это. Я хотел бы, чтобы мысли этого сообщества все же.

0

Решение

Вы ищете единый шаблон дизайна. Пожалуйста, проверьте следующий пример здесь на stackoverflow: https://stackoverflow.com/a/203359/3130183

-1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector