Закон Деметры указывает, что вы должны говорить только с объектами, о которых вы знаете напрямую. То есть, не выполняйте цепочку методов, чтобы разговаривать с другими объектами. Когда вы это делаете, вы устанавливаете неправильные связи с промежуточными объектами, ненадлежащим образом coupling ваш код для другого кода.
Это плохо.
Решение будет состоять в том, что класс, о котором вы знаете, существенно раскрывает простые обертки, которые делегируют ответственность за объект, с которым он имеет отношение.
Это хорошо.
Но это, по-видимому, приводит к тому, что класс имеет низкий cohesion. Он больше не отвечает за то, что он делает, но также имеет делегатов, что в некотором смысле делает код менее сплоченным, дублируя части интерфейса связанного с ним объекта.
Это плохо.
Действительно ли это приводит к снижению сплоченности? Это меньшее из двух зол?
Является ли это одной из тех серых областей разработки, где вы можете обсуждать, где находится эта линия, или существуют сильные, принципиальные способы принятия решения о том, где рисовать линию и какие критерии вы можете использовать для принятия этого решения?