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ę?


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.


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.