Грэди Буч в «Объектно-ориентированном анализе и проектировании»:
«Идея сплоченности также исходит из структурированного дизайна. Проще говоря, сплоченность
измеряет степень связности между элементами одного модуля (и
для объектно-ориентированного проектирования, один класс или объект). Наименее желательная форма
сплочённость - это сплочённость, в которой совершенно не связанные абстракции
брошенный в тот же класс или модуль. Например, рассмотрим класс, содержащий
абстракции собак и космических кораблей, поведение которых совершенно не связано.
Наиболее желательной формой сплоченности является функциональная сплоченность, при которой элементы
класс или модуль все работают вместе, чтобы обеспечить некоторое ограниченное поведение.
Таким образом, класс Dog является функционально связным, если его семантика охватывает поведение
о собаке, о целой собаке и только о собаке. "
Subsitute Dog с клиентом в приведенном выше, и это может быть немного яснее. Таким образом, цель в действительности состоит в том, чтобы стремиться к функциональной сплоченности и максимально отойти от случайной сплоченности. В зависимости от ваших абстракций, это может быть просто или может потребовать некоторого рефакторинга.
Примечание. Сплоченность применяется к «модулю» в той же степени, что и к одному классу, то есть к группе классов, работающих вместе. Таким образом, в этом случае классы «Заказчик» и «Заказ» по-прежнему имеют приличную сплоченность, поскольку они имеют такие прочные отношения, клиенты создают заказы, заказы принадлежат клиентам.
Мартин Фаулер говорит, что ему было бы удобнее называть его «Предложением Деметры» (см. Статью Насмешки - это не тупики ):
"Тестировщики Mockist больше говорят об избежании" крушения поезда "- цепочек методов в стиле getThis (). GetThat (). GetTheOther (). Избегание цепочек методов также известно как следование Закону Деметры. Хотя цепочки методов запах, противоположная проблема объектов среднего человека, раздутых методами пересылки, - также запах (я всегда чувствовал, что мне было бы удобнее с Законом Деметры, если бы он назывался Предложение Деметры .) "
Это хорошо подводит итог, откуда я родом: вполне приемлемо и часто необходимо иметь более низкий уровень сплоченности, чем может потребоваться строгое соблюдение "закона". Избегайте случайной сплоченности и стремитесь к функциональной сплоченности, но не зацикливайтесь на настройке, где это необходимо, чтобы более естественно вписаться в абстракцию вашего дизайна.