Цитата:
|
Согласен, к этому и стараюсь идти, чтобы не плодить глобал переменные, но порой очень не удобно передавать экземпляр внутрь иерархической структуры классов.
|
По иерархии наследования (в конструктор родителя) или по экземплярам (через конструкторы "дочерних"/вложенных) объектов перечада идет? В обоих случаях это может свидетельствовать о том, что где-то не до конца вынесены зависимости. Т.е. если есть класс A, который в конструкторе получает ссылку на Profile только для того, чтобы передать ее конструктору классу Б, значит, вероятно, конструктор класса А должен получать экземпляр класса Б, а не создавать его. Вся программа при инициализации собирается "снизу вверх", т.е. "примитивные" классы, классы "более высокого" уровня и т.п. Это устраняет большую часть проблемы, так как не нужно передавать параметры своим зависимостям.
Исключением является "крупномодульное" взаимодействие (плагины и т.п., получающие набор классов среды выполнения). Но там подобная передача ограничивается тем же одним уровнем, код внутри плагина точно так же собирается "от меньшего к большему". Так что "далеких" передач объектов нигде нет, есть только последовательность создания модуля/приложения. При использовании inversion-of-control контейнера там не линейная, а древовидная схема получается, но это не принципиально.