Code Smells: Pole tymczasowe

Pole tymczasowe

Kolejnym, może rzadziej spotykanym

przykładem degeneracji kodu jest pole tymczasowe (ang. temporary field). Spotykamy się z nim wówczas gdy w obrębie klasy istnieje pole, które jest wykorzystywane tylko przy pewnych warunkach lub okolicznościach. Gdy te warunki nie są spełnione pole ma, przez cały cykl życia klasy, wartość domyślną.

Popatrzmy na banalny przykład:

 

Podstawowym problemem przy tego typu defektach jest kłopot ze zrozumieniem intencji programisty – widząc coś takiego w kodzie automatycznie staramy się dopowiedzieć sobie na pytanie “Po co to jest?”. Idąc dalej, przy niewłaściwym zrozumieniu celu istnienia takiej konstrukcji, możemy mimochodem próbować wykorzystywać takie pole do naszych celów, co musi skończyć się błędem.

Drugim problemem jest pojawiająca się zależność. Na powyższym przykładzie metoda CalculateOther jest zależna od CalculateTemporary, która musi(!) być wywołana przed nią. Tego typu zagrywki już bardzo źle pachną. Oczywiście często można spotkać się z kodem gdzie kolejność jest ważna, ale w dobrze napisanych źródłach wynika to z kontekstu. Tutaj natomiast patrząc na same nagłówki metod nie jesteśmy  w stanie powiedzieć w jakiej kolejności wywoływać te metody. Oczywiście mamy do czynienia z metodami prywatnymi, co jeszcze bardziej pogłębia problem, zwłaszcza że łatwo można sobie z takim czymś poradzić. W powyższym banalnym przykładzie można by było po prostu przenieść obliczanie temporary do CalculateOther, ale zakładając że byłoby to coś bardziej skomplikowanego możemy utworzyć nową klasę odpowiedzialną za obliczanie tego współczynnika:

 

Istotny jest też sposób w jaki wydzielamy nową klasę

Tu zawsze priorytetem pozostaje utworzenie dobrej abstrakcji w przeciwnym razie można zrobić więcej dobrego niż złego. Tworzenie dobrej abstrakcji to jednak bardzo szeroki temat i postaram się o tym napisać trochę w którymś z przyszłych wpisów – choć raczej ten temat zasługuje na całą serię – na tyle na ile pozwolą mi moje skromne umiejętności. W każdym razie podstawową zasadą którą należy mieć na uwadze jest zasada pojedynczej odpowiedzialności.

Dodaj komentarz

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