Rozumowanie, by poczekać do trzeciej reguły w Regule Trzech?

16

Właśnie natknąłem się na artykuł „ Reguła trzech ” w Wikipedii

Zasada trzech jest podstawową zasadą refaktoryzacji kodu, która decyduje, kiedy zreplikowany fragment kodu powinien zostać zastąpiony nową procedurą. Stwierdza, że ​​kod można skopiować raz, ale gdy trzy razy użyje się tego samego kodu, należy go wyodrębnić w nowej procedurze. Zasada została wprowadzona przez Martina Fowlera w Refactoring i przypisana Donowi Robertsowi.

Wiem, że jest to tylko ogólna zasada, ale dlaczego refaktoryzacja jest zalecana dopiero po drugim powieleniu? Czy jest jakaś wada refaktoryzacji, kiedy piszemy pierwszą kopię?

Louis Rhys
źródło
2
Patrz Dwa to liczba niemożliwa i zasada Zero-Jedna-Nieskończoność dla innego zestawu perspektyw.
AakashM
Mówiąc o tworzeniu oprogramowania, oryginalna Wiki jest często znacznie lepszym źródłem niż Wikipedia. W końcu Ward Cunningham wynalazł Wiki jako sposób mówienia o tworzeniu oprogramowania. Zobacz C2.Com/cgi/wiki?RuleOfThree
Jörg W Mittag
2
Jeśli istnieją 2 scenariusze ponownego użycia, możesz łatwo rozgałęzić logikę (jeśli, inaczej). Gdy dojdzie do trzech możliwych ścieżek, łatwiej jest dokonać ponownego podziału na czynniki niż replikować i utrzymywać.
Andrew Lewis,
Myślę, że jest to wygodna wymówka dla kopiowania-wklejania, kiedy można zrefaktoryzować i uogólnić. Gdy otrzymasz trzeci przypadek, możesz uogólnić więcej.
Alexey,

Odpowiedzi:

17

Myślę, że ta ogólna zasada istnieje, ponieważ łatwo jest przyłapać się na graniu „Co, jeśli ...” podczas projektowania kodu po raz pierwszy lub po pierwszym powieleniu. W niektórych przypadkach napotkałem poważny paraliż analizy, ponieważ ludzie zaczęli projektować funkcje, które mogą być potrzebne później. Ale nie jest to konieczne w przypadku bezpośredniego problemu.

Istnieje sztuka projektowania / pisania tylko tego, czego potrzebujesz, przy jednoczesnym zachowaniu kodu do przyszłego przefaktoryzowania.

EdH
źródło
8
Trafne spostrzeżenie. Z mojego doświadczenia wynika, że ​​posiadanie trzeciej kopii sprawia, że ​​podobieństwa i różnice między nimi są nieco ostrzejsze niż w przypadku tylko dwóch.
Daniel B,