Ад зависимостей - как можно ли передавать зависимости глубоко вложенным объектам?

Вот общий воображаемый пример, составленный для этого поста: Рассмотрим 6 классов

TableFactory, TableData, TableCRUD, TableSchema, DBConnect, Logger. 

TableFactory - это внешний класс, допустим, он содержит объект TableData для таблицы БД.

В этой TableFactory нет вызовов TableSchema , DBConnect или регистратора . Я стремлюсь к f или пример внутренних объектов, которые не требуются во внешней области.

TableData является внутренним извлекающим и оперирует данными, поэтому ему требуется TableCrud , DBConnect и ] Logger .

TableCrud содержит TableSchema и требует DBConnect и Logger .

DbConnect itseld, чтобы делать вещи веселыми, нужен регистратор. В моем примере теперь 3 области видимости.

Мой вопрос довольно прост: если у вас есть объект в 3 (или более) областях, которые не вызываются объектами во внешней области видимости, как отправить эти объекты из внешней области во внутреннюю? область видимости без нарушения принципа разделения интерфейса -> TableFactory не должна иметь дело с DBConnect или Logger, необходимыми внутренним объектам.

Если кто-то соблюдает основные принципы ООП и стремится к легкой тестируемости -> у вас будут внешние объекты, требующие внедрения 5 объектов, а затем имеют методы получения, которые передают необходимые объекты дальше по цепочке. А объекты с внутренней областью видимости, в свою очередь, потребовали бы внедрения зависимостей их внутренних объектов с глубиной в 3 области, с геттерами для них тоже. Это делает объекты с внешней областью видимости, требующие множества зависимостей, а геттеры просто передают их.

Есть ли альтернатива этой методологии передачи объектов, которую я пропустил по пути? Поделись, пожалуйста! Любые ссылки / комментарии приветствуются.

25
задан hakre 16 September 2012 в 20:55
поделиться

1 ответ

Если вы наткнулись на тот же вопрос, проверьте статью Херви, которая бросается в глаза быкам

http://misko.hevery.com/2008/10/21/dependency-injection-myth- передача ссылки /

В случае, если статья исчезнет в будущем, вот отрывок

«Каждый объект просто знает об объектах, с которыми он непосредственно взаимодействует. просто чтобы получить их в нужном месте, где они необходимы. "

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

1
ответ дан 28 November 2019 в 20:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: