pi膮tek, 17 czerwca 2022

Refaktoring prostego komponentu w Angularze

Za艂贸偶my 偶e zastajesz taki fragment kodu angularowego i musisz w nim zmieni膰 kilka rzeczy. Od razu rzuca si臋 w oczy, 偶e wymaga on refaktoryzacji. HTML umie艣ci艂em w template dla lepszej widoczno艣ci.

Pierwsza rzecz oznaczona cyframi 1, 2, 3 w komentarzach. Widz臋 tutaj kilka problem贸w. Po pierwsze, wykonujemy kod kt贸ry nie zosta艂 jakkolwiek nazwany biznesowo. Po drugie, kod jest wykonywany w HTML, a aby to umo偶liwi膰, kolega z zespo艂u zrobi艂 publiczny service. Po trzecie, kod jest zduplikowany.

Wydzielam kod do geta i wtedy wygl膮da to tak:

Uda艂o si臋 pozby膰 duplikacji, metody z serwera te偶 ju偶 nie s膮 dost臋pne w templatce.

Nast臋pnie mamy metod臋 isSectionVisible, kt贸rej nazwa jest te偶 ma艂o zwi膮zana z domen膮. Na widoczno艣膰 sekcji sk艂ada si臋 kilka celowo pogmatwanych regu艂. Za ka偶dym razem gdy czytamy ten kod, musimy analizowa膰 dwie warto艣ci przychodz膮ce w inputach. Dodatkowo kod jest ma艂o czytelny. Mo偶na wydzieli膰 te warto艣ci do regu艂 w constach.

Zanim zaczniemy zmienia膰, warto zwr贸ci膰 uwag臋 na to, 偶e kod zawsze zwraca true, poniewa偶 jest zwyk艂膮 metod膮, a wywo艂uje si臋 go jak geta. 

isSectionVisible -- powinno by膰 isSectionVisible()

Poniewa偶 ta metoda nie przyjmuje argument贸w (by膰 mo偶e to b艂膮d, zajmiemy si臋 tym p贸藕niej), mo偶na j膮 uczyni膰 tak偶e getem. Nie zwracaj uwagi na to co dzieje si臋 w w regu艂ach biznesowych :)

Podj膮艂em tutaj pr贸b臋 nazwania regu艂, oczywi艣cie w prawdziwej aplikacji lepsz膮 nazw膮 b臋dzie prawdziwa regu艂a biznesowa.

Id膮c dalej mo偶na upro艣ci膰 ten kod jeszcze bardziej...

Dobrze skonfigurowany linter podpowie 偶e metoda nie obs艂uguje wszystkich 艣cie偶ek, domy艣lnie powinna zwraca膰 false, a obecnie gdy 偶aden z warunk贸w nie jest spe艂niony, zwraca undefined.

Nale偶a艂o by dogada膰, czy metoda ma domy艣lnie zwraca膰 true czy false.
Za艂贸偶my 偶e false.

Else if nie jest do ko艅ca potrzebny, bo i tak metoda zwraca warto艣膰 i wychodzimy z niej;


Zg艂aszam te偶 pretensj臋 do tego, 偶e metoda odnosi si臋 do this. Je艣li chcieliby艣my j膮 przenie艣膰 do serwisu (a chcieliby艣my), przeka偶my jej parametry. Dlaczego tak? Metoda jest wtedy czysta, nie operuje na globalnym stanie, 艂atwiej j膮 przetestowa膰.

Bli偶sze przyjrzenie si臋 logice wskazuje, 偶e metoda zwr贸ci true tylko gdy jest spe艂niony pierwszy warunek, a w ka偶dym innym przypadku, zwr贸ci false. Dzi臋ki tej wiedzy mo偶na j膮 upro艣ci膰 jeszcze bardziej. Na koniec kod po refaktoryzacji.





Brak komentarzy:

Prze艣lij komentarz