Сплоченность против единой ответственности

Я начал изучать такие понятия, как Сплоченность, и такие принципы, как Принцип единой ответственности. Меня очень смущает разница между ними.

В сети много информации, но мне очень сложно отфильтровать правильное сравнение.

Какова связь между сплоченностью и единой ответственностью? Может ли класс иметь только одну обязанность, но низкую сплоченность?


person Rapidistul    schedule 06.02.2019    source источник
comment
Совмещая ответ @RicardoCosteira, вы можете сказать, что сплоченность - это синтаксическая функция, тогда как SRP - семантическая. Сплоченность можно измерить с помощью инструмента анализа качества кода; но SRP может оценить только человек.   -  person jaco0646    schedule 12.02.2019
comment
stackoverflow.com/questions/11215141/   -  person Hamza Belmellouki    schedule 11.11.2019


Ответы (2)


Сплоченность можно рассматривать как показатель качества программного обеспечения, в то время как SRP является скорее субъективным принципом качества программного обеспечения. Как говорят программисты-прагматики, сплоченный код получается, когда вещи, которые принадлежат вместе и зависят друг от друга, оставайтесь вместе.

Например, если переменные или свойства экземпляра класса все используются его методами и только его методами, но методы также не используют какие-либо внешние данные или методы других объектов, такой класс называется очень сплоченный. Однако, если этот класс выполняет чтение и запись из файла, этот класс можно рассматривать как не придерживающийся принципа единой ответственности, поскольку чтение и запись можно рассматривать как две совершенно разные задачи. Несмотря на это, вы также можете видеть основную задачу класса как «выполнение операций ввода-вывода с файловой системой», поэтому SRP несколько открыт для интерпретации в зависимости от контекста, в котором он применяется.

person Ricardo Costeira    schedule 07.02.2019

Эти понятия кратко описаны в Википедии здесь и здесь.

Одна ответственность по-прежнему является абстрактным понятием. Если ответственность заключается в создании отчета, это одна задача, но все же задача с несколькими шагами и частями данных. Таким образом, в классе есть место для низкой сплоченности. Просто сделать расчет, если он простой, гораздо более «атомарный» и с высокой связностью.

Если вы видите, что SRP имеет единственную причину для изменения класса, я думаю, это тоже помогает.

person progmatico    schedule 07.02.2019