Хорошее определение для "согласованности"
Я пытаюсь сказать кому-то, что его код не является "связным" в том смысле, что он служит нескольким целям. Я не думаю, что могу объяснить это очень хорошо, поэтому я ищу хорошую ссылку и / или определение.
5 ответов
Я думаю, что правильный термин - сплоченность.
В компьютерном программировании сплоченность - это мера того, насколько тесно связаны и сфокусированы различные обязанности программного модуля. Сплоченность является порядковым типом измерения и обычно выражается как "высокая когезия" или "низкая когезия" при обсуждении.
Модули с высокой когезией имеют тенденцию быть предпочтительными, поскольку высокая когезия связана с несколькими желательными характеристиками программного обеспечения, включая надежность, надежность, возможность повторного использования и понятность, в то время как низкая когезия связана с нежелательными характеристиками, такими как сложность в обслуживании, сложность в тестировании, сложность в повторном использовании. и даже трудно понять.
Я имел Code Complete от Стива Макконнелла рядом с моим компьютером (то есть библией программистов) с открытой страницей, объясняющей сплоченность, поэтому я решил поделиться,
Сплоченность возникла из структурированного дизайна и обычно обсуждается в том же контексте, что и сцепление. Под связностью понимается то, насколько тесно все подпрограммы в классе или весь код подпрограммы поддерживают главную цель - насколько сфокусирован класс. Классы, которые содержат тесно связанные функциональные возможности, описываются как имеющие сильную сплоченность, и эвристическая цель состоит в том, чтобы сделать сплоченность максимально сильной.
Я использую термин "разделение интересов", чтобы объяснить это при рефакторинге. Часто, когда код является довольно новым, вещи объединяются, так как отдельные проблемы поначалу не ясны.
Один из простых способов проиллюстрировать это своим коллегам - попросить их написать контрольные примеры для кода. Это должно проиллюстрировать, что код не является ясным или последовательным.
Еще одна хорошая фраза, которую следует использовать, заключается в том, что функции / объекты "должны делать одно и делать это хорошо", это имеет значение во всем, от имен объектов / методов до общей архитектуры системы.
В дополнение к ответам, данным до сих пор, простой способ думать о высокой степени согласованности - это отсутствие дублирования функций и четкое разделение связанных функций на отдельные модули, компоненты или классы. Таким образом, если вам нужна функция, похожая на другую функцию, вы вырезаете и вставляете, а затем изменяете копию кода, вы уменьшаете сплоченность. Если вы измените оригинал для обработки нового случая, когда новый случай явно связан с существующей функциональностью, вы увеличиваете сплоченность. Иными словами, если ваша программа должна выполнять заданную задачу, независимо от того, сколько раз или в каком количестве мест, для максимальной согласованности должен быть только один фрагмент кода, который выполняет эту задачу. В то же время данный класс, модуль или компонент должны иметь единую область ответственности. Объединение несвязанных функциональных возможностей в один класс или компонент также снижает сплоченность.
Как говорит CodeWiki, сплоченность, как правило, обсуждается со связью, когда эти два могут действовать против друг друга, особенно когда строгие интерфейсы не спланированы тщательно. Многие из найденных в гугле статей о когезии относятся к конструкции ОО, но когезия и сцепление не ограничиваются ОО.
Отмечены упорядоченным, логичным и эстетически последовательным соотношением частей; "связный аргумент" - от http://www.websters-online-dictionary.org/definition/coherent