Вот общий воображаемый пример, составленный для этого поста: Рассмотрим 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 области, с геттерами для них тоже. Это делает объекты с внешней областью видимости, требующие множества зависимостей, а геттеры просто передают их.
Есть ли альтернатива этой методологии передачи объектов, которую я пропустил по пути? Поделись, пожалуйста! Любые ссылки / комментарии приветствуются.
Если вы наткнулись на тот же вопрос, проверьте статью Херви, которая бросается в глаза быкам
http://misko.hevery.com/2008/10/21/dependency-injection-myth- передача ссылки /
В случае, если статья исчезнет в будущем, вот отрывок
«Каждый объект просто знает об объектах, с которыми он непосредственно взаимодействует. просто чтобы получить их в нужном месте, где они необходимы. "
Так что нужно сделать вместо того, чтобы создавать глубоко вложенный объектный граф с передачей зависимостей сверху вниз, перемещаться по горизонтали и управлять зависимостями в другом месте .