W języku OO (np. Między innymi w Javie) jak naprawić duplikat kodu w zależności od zakresu jego występowania? Zacznę od (na przykład)
- w tej samej klasie (zakresie) wykonaj refaktoryzację metody ekstrakcji (poprawka)
- w klasach o tej samej hierarchii (zakresie) wykonaj Extract Method i Pull Up (fix)
- ...
object-oriented
dry
Peter Kofler
źródło
źródło
Odpowiedzi:
Niedawno znalazłem dobrą odpowiedź na moje pytanie w „Czystym kodzie” wuja Boba, którym chcę się podzielić. Rozróżnia trzy typy powielania
Fragmenty identycznego kodu należy zastąpić jedną metodą. Tak więc poprawka polegałaby na wyodrębnieniu metody i delegowaniu do typowego zachowania.
SthUtil
lubSthLib
).przypadki
switch/case
iif/else
zawsze sprawdzają ten sam zestaw warunków .Moduły implementujące podobne algorytmy . Są najtrudniejsze do znalezienia, ponieważ żaden detektor klonów nie może ich znaleźć.
Również ważny punkt wspomniany przez Odeda, w przypadku różnych wersji bibliotek
Ostatecznie najlepszym zdaniem, na które można odpowiedzieć na moje pytanie, są bodźce:
źródło
Ogólnie - skonsoliduj zduplikowany kod w jednym miejscu i upewnij się, że oryginalna witryna do powielania dzwoni do skonsolidowanego miejsca.
W twoich przykładach w ramach klasy byłaby to wyodrębniona metoda, aw zestawie klas metoda wyciągnięta w klasie bazowej.
W kodzie kopiuj-wklej oznaczałoby to usunięcie duplikatów i upewnienie się, że wszyscy użytkownicy używają teraz pojedynczej kopii (niezależnie od poziomu).
W przypadku różnych wersji bibliotek należy skonsolidować jedną wersję (jeśli to możliwe).
źródło
Myślę, że jest to pytanie otwarte, ale zależy to również od stanu kodu. Mam na myśli, że możesz trochę tolerować duplikat kodu w zależności od kontekstu. Zasada trzech jest dobra w tej sprawie.
Reguła trzech Po raz pierwszy coś robisz, po prostu to robisz. Za drugim razem, gdy robisz coś podobnego, skrzywisz się przy powielaniu, ale i tak robisz to samo. Za trzecim razem, gdy zrobisz coś podobnego, dokonujesz refaktoryzacji.
Chociaż jest to dość dyskusyjne, ten post rozważa również przypadki, w których tolerowałbyś duplikat kodu.
źródło