Tworzenie kodu według najlepszych praktyk
2 godz. 45 min · Full-stack i Programowanie
Rafał PiekaraSoftware KomandosNie zrozumiesz SOLIDa bez teoretycznych podstaw. Przejdziemy przez założenia stojące za każdą z nich. Przeanalizujemy problemy, które możesz spotkać oraz dowiesz się dlaczego ciągle jeszcze tak wielu programistów nie stosuje się do tych zasad.
Ruby i Typescript to technologie, które świetnie odzwierciedlają uniwersalizm SOLIDa. Te złote zasady działają w językach dynamicznie typowanych i interpretowanych jak Ruby oraz przy statycznym typowaniu na przykładzie Typescript.
Zanim zabierzesz się za programowanie warto poćwiczyć SOLIDny sposób myślenia. Zmierzysz się z zadaniami, w ramach których będziesz projektować kod tak, aby wszystkie zasady SOLID znalazły w nim swoje zastosowanie.
Prawda jest taka, że kod, z którym w większości pracujemy ma swoją historię. Czasami historia ta jest tak bolesna, że klasy i metody są zagmatwane, poplątane i trudne w utrzymaniu. Gdy dotrzesz do tego miejsca będziesz mieć w arsenale wszystkie potrzebne narzędzia, żeby zmierzyć się z zadaniami praktycznymi, które przekształcą kod legacy w SOLIDne arcydzieło.
Tak ważny temat, jak testowanie nie może zostać pominięty. Między innymi po to też stosujemy zasady SOLID, żeby nasz kod praktycznie sam się testował. Napiszesz więc testy, których wzorce możesz wykorzystać w dowolnym projekcie, dowolnej technologii, jeśli tylko kod, który testujesz będzie spełniał wymagania zasad SOLID.
Nie ma znaczenia, czy dopiero zaczynasz przygodę z programowaniem, czy też jesteś starym wyjadaczem, który klasami i interfejsami myśli przy zagryzaniu tosta na śniadanie. Ten kurs jest właśnie dla Ciebie. Technologia ani język programowania też nie mają znaczenia. Zasady SOLID to uniwersalny zbiór. Ich znajomość sprawi, że Twój kod będzie lepszy, łatwiejszy w utrzymaniu i odporny na perturbacje i zmiany.
Przygotowałem teraz dla Ciebie praktyczny przykład, który razem z refaktoryzacji
mamy tutaj Telekom serwis, gdzie mamy cztery metody odpowiedzialne
za poszczególne czynności.
Już na pierwszy rzut oka widać, że każda z tych metod wykonuje różne zadania
i odpowiada względem różnych aktorów.
Wobec tego przystąpimy teraz do szybkiego faktoringu i wydzielenia
poszczególnych warstw.
W tej klasie możemy zacząć od tej metody add payment i stwórzmy sobie tutaj jakiś
payment serwis, który będzie miał tą metodę.
Add payment przyjmuje jako parametr payment
do jakiejś wewnętrznej tablicy payments będzie sobie dodawał ten nowy payment.
Tutaj w konstruktorze ustalimy jeszcze wartość początkową dla Payment.
I gotowe.
Możemy teraz podmienić wywołanie tego serwisu w metodzie Add payment.
Zrobimy sobie Payment Service New adult Payment Payment.
OK, więc pozbyliśmy się tutaj logiki z klasy Telecom Service i
wydawaliśmy ją do zewnętrznej klasy Payments Service.
Oczywiście Telekom Service w tym momencie będzie pełnił rolę takiego Orchestra Tora,
który będzie wywoływał poszczególne serwisy w zależności od potrzeby.
Więc nie potrzebujemy teraz tej zmiennej instancji Payments.
Zajmijmy się teraz planami.
Utwórzmy sobie teraz klasę Plan Service.
I utwórzmy metodę Change Plan, która przyjmuje parametr New Plan.
Klasa + Service wymaga jeszcze konstruktora i wartości początkowej dla.
Pierwotnego planu, więc ustalmy sobie tutaj plan.
Podmieniamy plan i w metodzie Change Plan podmieniamy istniejący plan na plan, który
wymieniamy, wobec czego możemy tutaj wywołać.
Plan Serwis ustawić wartość początkową jako serwis plan i zmienić na nowy plan
naszego plan serwisu.
Kolejna delegacja została wykonana.
Przejdźmy do kolejnej klasy i kolejną klasą będzie klasa odpowiedzialna
za fakturowanie refaktoryzacji.
Cały telekom serwis do serwisów do serwis Objects.
Żeby było prościej wydzielając to odpowiedzialności, Oczywiście możemy tutaj
się w bardziej zaawansowane wzorce architektoniczne.
Natomiast zależy nam, żeby ten telekom, serwis i wszystkie poszczególne mniejsze
granulaty klasy spełniały zasadę SRP.
Więc przejdźmy do Invest Serwisu.
Stwórzmy sobie inny serwis, który będzie miał metodę Generate Invisible.
I ten device serwis powinien przyjmować jakiś parametr np.
customers i on będzie nam generował fakturę dla danego klienta.
I tutaj podmieniamy wywołanie Token Voice Service i metoda Generate Inbox.
Na koniec zostaje nam Twój Customer i stworzymy sobie tutaj np.
klasę Modified i będzie miał metodę Native Customer.
Przyjmuje parametr Customer i.
Podmieniamy wywołanie tej klasy, więc w tym momencie wycięliśmy logikę z
tego rejestratora Telekom Service to poszczególnych klas, które teraz mają
tylko jedną odpowiedzialność, a orkiestra Tor nie ma w sobie żadnej logiki.
Wszystkie operacje biznesowe deleguje do serwisów, które za nie odpowiadają.
I w następnej lekcji zobaczysz jak wielki ma to wpływ na jakość i wygodę testowania
tego kodu, więc zapraszam Cię do kolejnego materiału.