Dlaczego klasa użytkownika zawsze jest taka tłusta?

D

Twoja klasa użytkownika jest tak gruba, że kiedy idziesz z nią na plażę, wszystkie wieloryby zaczynają śpiewać „We are Family”.

Twoja klasa użytkownika jest tak gruba, że kiedy Bóg powiedział „Niechaj się stanie światłość!”, poproszoną ją by się przesunęła.

Brzmi znajomo?

Ilekroć dostaję projekt do audytu, bądź sprawdzam na githubie pierwszy lepszy z brzegu to zawsze jest ten sam problem – przerośnięta klasa użytkownika. Powód jest zawsze ten sam i zawsze prosty – większość elementów aplikacji jest połączonych z klasą użytkownika, dlatego wygodnie jest umieszczać w niej różne metody.

Czy złym pomysłem jest posiadanie tłustej klasy użytkownika? Prawdopodobnie nie, jeśli udajesz, że nie widzisz problemu. Przyjrzyjmy się zatem jak ta klasa puchnie i jak temu zapobiegać.

Jak klasa staje się tłusta?

Dodajesz jedną metodę. Po pewnym czasie dodasz jeszcze jedną. Po kilku miesiącach edytor zlicza linie w setkach. Mija kilka lat, a Ty linie kodu zliczasz w tysiącach. Wtedy zaczynasz się zastanawiać, co się stało? Gdzie coś poszło nie tak? Jak stałem się gruby?

Przykład

Wyobraźmy sobie, że tworzymy nowy projekt w Laravelu, a w nim pustą klasę użytkownika.

Wszystko wygląda pięknie, schludnie i czysto. Do czasu aż ktoś zadecydował, że chce mieć na stronie konto administratora. Dodajmy więc admina.

Jeden kilogram więcej nie robi różnicy, nie ma się czym martwić. Nadal mogę jeść pizzę w środku nocy. To tylko jedna dodatkowa metoda w klasie użytkownika. Po pewnym czasie potrzebujesz jeszcze moderatora by nie dawać każdemu najwyższych uprawnień.

Ale zaraz zaraz! Potrzebujemy jeszcze wysyłania maili z tajnymi informacjami tylko dla administratora. Dodajmy zatem metodę…

Przykład trywialny ale idealnie oddaje to, jak łatwo klasa użytkownika potrafi przybierać na wadze.

Co mogę z tym zrobić?

Odpowiedź jest prosta ale nie łatwa do implementacji. Musisz iść na dietę! Prawdopodobnie słyszałeś to setki razy. W dodatku to nie działa. Pilnowanie wagi wymaga sporo wysiłku, a przede wszystkim samodyscypliny. Tak samo jest w programowaniu, SOLID, SOLID, SOLID.

Czy naprawdę potrzebujesz tego wszystkiego w klasie użytkownika? Skoro metoda sendEmailToAdmin() jest używana tylko dla administratora, wydzielmy ją.

Może logikę da się wydzielić do warstwy abstrakcyjnej?

Wygląda to zdecydowanie lepiej ale jeszcze nie najlepiej. Możemy jeszcze odseparować logikę do osobnej klasy.

 

Teraz jest lepiej. Klasa użytkownika zawiera tylko to, co powinna zawierać. Dobra robota. Chodźmy zjeść pizzę. Po zjedzeniu kawałka pizzy znów jesteś gruby. Tak nazywa się efekt jojo po diecie. Utrzymywanie małych klas jest ciągłą pracą, to tak jak z kondycją naszego ciała, nie ćwiczysz – tyjesz. Łatwo jest dodać nowe metody, ale znacznie trudniej je usunąć.

Jak odchudziliśmy obiekt użytkownika? Zasadniczo mówiąc usunęliśmy z niego te metody, które były rzadko używane. Połączyliśmy również logikę podobnych funkcji.

Chudy grubas

Podsumowując, mogę tylko powiedzieć, że musisz nieustannie obserwować swój brzuch. Żartuję, musisz jedynie obserwować wielkość klas i wydzielać, jeśli tylko zauważysz niepokojące sygnały. Wielkość brzucha nie ma znaczenia podczas programowania… dopóki możesz dosięgnąć klawiatury 🙂

Jeśli jesteś szczęśliwy z tego jak wygląda Twoja klasa użytkownika, bądź z tego dumny! Tłuszcz nie jest zły, jest po prostu inny. Ani zbyt gruby, ani zbyt chudy – najważniejsze jest utrzymanie równowagi.

O autorze

Filip Nowacki

Swoją przygodę z IT rozpocząłem mając 13 lat, kiedy to stworzyłem swoją pierwszą stronę internetową. Pracowałem jako backend & mobile developer, rozwijając kilka ogólnopolskich produktów o zasięgu blisko 15 milionów użytkowników. Obecnie pracuję w #fintech dla największych banków w Polsce. Prywatnie jestem maniakiem optymalizacji, testów A/B, motoryzacji i architektury aplikacji.

Dodaj komentarz

This site uses Akismet to reduce spam. Learn how your comment data is processed.