Здравствуйте, dmitry_npi, Вы писали:
_>Добрый день.
_>Допустим, есть у меня дерево, его вершины — объекты классов NodeClass1, NodeClass2 ... и RootNodeClass. То есть, например, класс RootNodeClass может создать у себя детей типа 1 и 2, в свою очередь NodeClass1 может иметь детей типа 1, 3, 4, ну и так далее в самых разных комбинациях.
_>И допустим, один из классов, NodeClassX, нуждается в данных, которые есть в корневой вершине, но его "предкам" эти данные не нужны. _>Как правильно их туда передать? _>Следует ли тащить эти данные через цепочку конструкторов? Тогда получится, что большинство классов будут тащить как бы лишний параметр в конструкторе.
А если передавать ссылку на RootNodeClass? Тогда всяким NodeClass1, NodeClass2 нет нужды знать определение корневого класса, а NodeClassX уже может (зная определение рут-класса) получать нужные ему данные, вызывая какой-то его метод. Правда, все равно понадобится, конечно, передавать через конструкторы.
Ну или вовсе передавать в конструкторе какой-то прокси объект, который содержит ссылку на RootNodeClass и знает как у него узнать данные. Но полностью скрывает другие его интерфейсы, выдавая какой-нить только один метод GetDataFromRoot, который де факто и будет общаться со ссылкой на рут-класс. Тогда по крайней мере нет необходимости дочерние класса знать про рут. Его полностью будет скрывать прокси-объект, разрешая только нужное и не более.