Причини чекати до третього разу у Правилі трьох?


16

Я щойно натрапив на статтю " Правило трьох " у вікіпедії

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

Я знаю, що це лише велике правило, але чому його рекомендують проводити рефактор лише після другого дублювання? Чи є якісь недоліки у рефакторингу, коли ми пишемо перше дублювання?



Якщо говорити про розробку програмного забезпечення, то оригінальний Wiki часто є набагато кращим джерелом, ніж Вікіпедія. Зрештою, Уорд Каннінгем винайшов Wiki як засіб для розмови про розробку програмного забезпечення. Дивіться C2.Com/cgi/wiki?RuleOfThree
Jörg W

2
Якщо є 2 сценарії повторного використання, ви можете легко розгалужити логіку (якщо, інакше). Як тільки він дістається до трьох можливих шляхів, перепрофілювати їх стає легше, ніж копіювати та підтримувати.
Ендрю Льюїс


Я думаю, що це зручний привід для копіювання-вставки, коли можна насправді рефакторировать та узагальнити. Коли ви отримаєте третій випадок, ви можете узагальнити більше.
Олексій

Відповіді:


17

Я думаю, що це правило існує тому, що його легко впіймати у гру "Що, якщо ..." при розробці коду вперше або після першого дублювання. У деяких випадках я стикався з важким паралічем аналізу, оскільки люди почали розробляти функціональні можливості, які можуть знадобитися пізніше. Але не потрібна для негайної проблеми.

Існує мистецтво проектувати / писати лише те, що потрібно, зберігаючи код, придатний до подальшого повторного факторингу.


8
Це хороший момент. На мій досвід, наявність третього примірника також робить спільні та відмінності між ними дещо різкішими, ніж лише у двох.
Даніель Б
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.