Принципы, которые могут применяться к этому примеру:
Сокрытие информации : Отделение деталей проекта в вашем коде, которые могут измениться.Создайте стабильный интерфейс, который защищает остальную часть программы от реализации.
Инкапсуляция : разделить элементы абстракции, которые составляют его структуру и поведение.Отделите договорный интерфейс абстракции от его реализации.Используйте стандартные языковые механизмы для объединения данных с интерфейсом.
Обратите внимание, что приведенные мной определения сокрытия и инкапсуляции информации довольно схожи, и у разных людей есть свои определения того, что они означают.Я взял их из Википедии.
Принцип разделения интерфейса : Зависимость одного класса от другого должна зависеть от наименьшего возможного интерфейса.
Вопрос, который вы должны определитьявляется ли написание вашего класса таким образом, где Child
сам является частью интерфейса, является стабильным и минимальным интерфейсом, от которого зависят клиенты.В большинстве случаев программисты ОО предпочитают полагаться на явный набор методов в качестве своего интерфейса вместо элементов данных, чтобы они могли изменять элементы данных по своему усмотрению.Некоторые рекомендуют эту технику как изречение.Это может или не может применяться в вашем случае.
Есть еще один принцип, который может или не может применяться к вашему примеру:
Закон Деметры : Говорите только с вашим непосредственнымдрузья.
Закон Деметры не поощряет иерархии глубокого доступа, такие как p.Child.Child.Child.Зачем?Потому что клиенты тогда приобретают глубокие структурные знания об объектах, с которыми они разговаривают, и это увеличивает связь между клиентом и этими объектами.Сказав это, я думаю, что есть много примеров в мире, где это соединение приемлемо;вам нужно будет решить, применимо ли это и в вашем случае.
РЕДАКТИРОВАТЬ : с вашим пересмотренным примером Закон Деметры смотрит на меня гораздо ближе к тому, что вы ищете.