Хорошее определение «согласованности»

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

Ответов (5)

Решение

Я думаю, что правильный термин - сплоченность .

В компьютерном программировании сплоченность - это мера того, насколько сильно связаны и сфокусированы различные обязанности программного модуля. Сплоченность - это порядковый тип измерения, который при обсуждении обычно выражается как «высокая сплоченность» или «низкая сплоченность».

Модули с высокой связностью, как правило, предпочтительнее, потому что высокая связность связана с несколькими желательными характеристиками программного обеспечения, включая надежность, надежность, возможность многократного использования и понятность, тогда как низкая связность связана с нежелательными характеристиками, такими как сложность поддержки, трудность тестирования, трудность повторного использования. , и даже понять сложно.

Отмечены упорядоченным, логичным и эстетически последовательным соотношением частей; «последовательный аргумент» - из http://www.websters-online-dictionary.org/definition/coherent

Я использую термин «разделение ответственности», чтобы объяснить это во время рефакторинга. Часто, когда код является довольно новым, все складывается в кучу, поскольку отдельные проблемы поначалу не ясны.

Один из простых способов продемонстрировать это своему коллеге - попросить их написать тестовые примеры для кода. Это должно показать, что код непонятен или непротиворечив.

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

В дополнение к приведенным до сих пор ответам, простой способ думать о высокой согласованности - это отсутствие дублирования функций и четкое разделение связанных функций на отдельные модули, компоненты или классы. Таким образом, если вам нужна функция, аналогичная другой функции, и вы вырезаете и вставляете, а затем изменяете копию кода, вы снижаете согласованность. Если вы измените оригинал для обработки нового дела, когда новое дело явно связано с существующей функциональностью, вы повысите сплоченность. Другими словами, если ваша программа должна делать определенное действие, независимо от того, сколько раз и в каком количестве мест, для максимальной согласованности должен быть только один фрагмент кода, который это делает. В то же время у данного класса, модуля или компонента должна быть единая зона ответственности.

Как сказано в CodeWiki, сплоченность обычно обсуждается с привязкой, когда они могут действовать в противовес друг другу, особенно когда строгие интерфейсы не спланированы тщательно. Многие из найденных в гугле статей о сплоченности относятся к объектно-ориентированному дизайну, но сплоченность и взаимосвязь не ограничиваются объектно-ориентированным дизайном.

У меня был Code Complete Стива МакКоннелла рядом с моим компьютером (то есть библия программистов) с открытой страницей, объясняющей сплоченность, поэтому я подумал, что поделюсь,

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