Code Smells: Duplikacja kodu

Duplikacja kodu jest

problemem o tyle prostym do zauważenia co powszechnym. Dla mnie jest też jednym z najprzyjemniejszych problemów w refaktoryzacji. Lubię patrzeć jak kod chudnie w oczach :). Czym jest powielany kod tłumaczyć nikomu nie trzeba. Zajmijmy się więc określeniem dlaczego jest niepożądany.  Piękna w swej prostocie zasada Don’t Repeat Yourself (DRY) zaleca ogólną eliminację powtarzających się czynności, które wykonujemy w pracy jako programiści. Pisanie kodu, który już gdzieś istnieje w projekcie jest jedną z takich czynności.

Duplikacja kodu może wystąpić wskutek pisania podobnej funkcjonalności w projekcie bez jego dobrej znajomości. Wtedy na nowo odkrywamy Amerykę, co nie jest powodem do chwały, może też generować nowe błędy z którymi ktoś już dawno sobie poradził. Co w przypadku gdy znamy projekt i pamiętamy, że widzieliśmy gdzieś coś podobnego? Kopiuj wklej? Fakt wtedy nie wygenerujemy nowych błędów, powielimy za to stare :). Co w takim wypadku robić?

Nie obędzie się bez refaktoryzcji.

Spójrzmy na kilka standardowych scenariuszy postępowania:

  1. Jeżeli duplikacja kodu ma miejsce tyko w obrębie jednej klasy, to powtarzający się kod należy opakować w prywatną metodę i wywoływać ją w miejscach gdzie występował
  2. Jeżeli duplikacja występuje w co najmniej dwóch podklasach, to warto rozważyć opakowanie (jeżeli jeszcze nie jest) w chronioną metodę i wyniesienie jej do klasy bazowej (może warto przemyśleć wykorzystanie wzorca Metoda Szablonowa)
  3. Jeżeli duplikacja występuje w co najmniej dwóch niezwiązanych ze sobą klasach to należy się zastanowić czy nie warto byłoby opakować zduplikowany kod w nową klasę dostarczającą nową funkcjonalność.

Spójrzmy na prosty przykład.

Przed:

Po:

 

Jak widać pozbyć się zduplikowanego kodu można w stosunkowo łatwy sposób. Główną korzyścią jaką odniesiemy będzie to, że wraz z kodem nie będziemy duplikować błędów. Wyrazimy też dosyć jasno swoje intencje poprzez wykorzystanie wymienionych technik, dzięki czemu ludzie którzy będą pracowali z kodem po nas, będą mieli mniej szans na popełnienie błędów.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *