Как убедить вашего коллегу-разработчика написать короткие методы? - PullRequest
33 голосов
/ 19 мая 2009

Длинные методы злы на нескольких основаниях:

  • Их трудно понять
  • Их трудно изменить
  • Их трудно использовать повторно
  • Их сложно проверить
  • У них низкая когезия
  • Они могут иметь высокую связь
  • Они имеют тенденцию быть слишком сложными

Как убедить вашего коллегу-разработчика написать короткие методы? (оружие запрещено =)

вопрос от agiledeveloper

Ответы [ 22 ]

49 голосов
/ 19 мая 2009

Попросите его написать юнит-тесты для методов.

25 голосов
/ 19 мая 2009

Это зависит от ваших определений «короткий» и «длинный».

Когда я слышу, как кто-то говорит «напиши короткие методы», я сразу же реагирую плохо, потому что я столкнулся со слишком большим количеством спагетти, написанных людьми, которые считают, что идеальный метод - это две строки: по одной строке для вызова другого метода. (Вы говорите, что длинные методы - это зло, потому что «их трудно понять»? Попробуйте зайти в проект, где каждое тривиальное действие генерирует стек вызовов глубиной 50 методов и пытается выяснить, какой из этих 50 уровней вам нужно изменить. ...)

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

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

24 голосов
/ 19 мая 2009

Вы сделали список недостатков. Попробуйте составить список того, что вы получите, используя короткие методы. Конкретные примеры. Затем попытайтесь убедить его снова.

15 голосов
/ 19 мая 2009

Я читал эту цитату откуда-то:

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

7 голосов
/ 19 мая 2009

Код Отзывы!

Я предлагаю вам попробовать сделать несколько обзоров кода. Таким образом, вы могли бы провести небольшой семинар по лучшим практикам и форматированию, которого придерживается ваша компания. Это добавляет контекст, что короткие методы - это способ сделать код более читабельным и более понятным, а также совместимым с SRP.

7 голосов
/ 19 мая 2009

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

5 голосов
/ 19 мая 2009

Чтобы расширить ответ rvanider, выполнение цикломатического анализа сложности кода сделало чудеса, чтобы привлечь внимание к большой проблеме метода; когда я ушел, работа над тем, чтобы заставить людей меняться, все еще находилась в процессе разработки (слишком много движений в сторону больших методов).

Переломным моментом стало то, что мы начали связывать цикломатическую сложность с базой данных ошибок. CC более 20, который не был заводским, гарантированно имел несколько записей в базе данных ошибок, и часто эти ошибки имели «родословную» (исправление ошибки A вызвало ошибку B; исправление ошибки B вызвало ошибку C; и т. Д.). На самом деле у нас было три CC более 100 (максимум 275), и эти методы составляли 40% случаев в нашей базе данных ошибок - «вы знаете, может быть, функция с 5000 строками не такая хорошая идея ...»

Это было более очевидно в проекте, которым я руководил, когда начинал там. Цель состояла в том, чтобы сохранить CC как можно ниже (97% были моложе 10 лет), и конечным результатом был продукт, который я в основном перестал поддерживать, потому что 20 ошибок, которые я не стоил, исправлять

Безошибочного программного обеспечения не произойдет из-за коротких методов (и это может быть аргумент, который вам придется учитывать), но исправления ошибок выполняются очень быстро и часто не имеют побочных эффектов, когда вы работаете короткими и лаконичными методами.

Хотя написание модульных тестов, вероятно, излечит их от длительных методов, ваша компания, вероятно, не использует модульные тесты. Риторика заходит так далеко и редко работает на разработчиков, которые застряли на своем пути; покажите им цифры о том, как эти методы создают больше работы и программного обеспечения с ошибками.

5 голосов
/ 19 мая 2009

Если вы пытались объяснить хороший дизайн, а люди просто не получают его или просто отказываются его получить, тогда прекратите попытки. Это не стоит усилий. Все, что вы получите, это плохой представитель для себя. Некоторые люди просто безнадежны.

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

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

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

4 голосов
/ 19 мая 2009

Поиск правильного сочетания между длиной функции и простотой может быть сложным. Попробуйте применить показатель, такой как Cyclomatic Complexity , чтобы продемонстрировать сложность в поддержании кода в его нынешнем виде. Ничто не сравнится с неличными показателями, основанными на таких факторах тестирования, как количество филиалов и количество решений.

4 голосов
/ 20 мая 2009

Не знаю, откуда взялась эта великая цитата, но:

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

...