Рассуждаете подождать до третьего раза в правиле трех?

16

Я только что наткнулся на статью « Правило трех » в википедии

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

Я знаю, что это всего лишь практическое правило, но почему рекомендуется проводить рефакторинг только после второго дублирования? Есть ли обратная сторона рефакторинга, когда мы пишем первое дублирование?

Луис Рис
источник
2
См. Два - это невозможное число и правило Zero-One-Infinity для другого набора перспектив.
AakashM
Говоря о разработке программного обеспечения, оригинальный Wiki часто является гораздо лучшим источником, чем Wikipedia. В конце концов, Уорд Каннингем изобрел вики как средство для обсуждения разработки программного обеспечения. См. C2.Com/cgi/wiki?RuleOfThree
Jörg W Mittag
2
Если есть 2 сценария для повторного использования, вы можете легко перейти к логике (если, иначе). Как только он добирается до трех возможных путей, становится легче перефакторинг, чем копировать и поддерживать.
Эндрю Льюис
Я думаю, что это удобное оправдание для копирования-вставки, когда можно фактически сделать рефакторинг и обобщить. Когда вы получите третий случай, вы можете обобщить больше.
Алексей

Ответы:

17

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

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

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