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.
Zobacz, że teraz dla ułatwienia wydzieliłem do osobnych plików
klasy admin Account i User Account.
Cały czas ich zachowanie jest takie samo implementują ten sam interfejs i
zachowują się dokładnie w ten sam sposób.
Natomiast zachodzi tutaj jedna drobna zmiana.
Mianowicie dodałem dziedziczenie, że admin dziedziczy też po klasie usera,
bo admin też jest użytkownikiem, wobec czego rzucanie wyjątku odbywa się tylko i
wyłącznie w klasie usera, a admin odwołuje się do tej metody nadrzędnej
poprzez wywołanie kodu.
Super więc sprawdzany jest ten warunek kryjący się pod metodą
permission, które z kolei są zdefiniowane w obu klasach.
Wspólny interfejs to samo zachowanie.
Spodziewamy się w obu miejscach.
Różni się tylko output odnośnie do użytkownika czy do konta admina?
Jak to będzie wyglądało w kodzie?
Kod dla użytkownika wygląda bardzo prosto.
W pierwszej kolejności testujemy, czy nasz użytkownik może dobrać się do pewnego
zasobu, a w drugiej kolejności sprawdzamy co się dzieje.
Jeśli nie ma uprawnień, Jeśli nie ma uprawnień to rzucany jest wyjątek
i kod dla admina jest identyczny.
Zobacz jest identyczny jest taki sam jak to ma miejsce w porównaniu klasy
admin Account i User account.
Testy wyglądają identycznie.
To oznacza, że klasy są zgodne z zasadą LSB, bo możemy je podstawiać zamiennie i
test działa dokładnie w ten sam sposób.
Sprawdzamy wiadomo output, natomiast zachowanie tych klas jest takie samo, co
jest odzwierciedlone z kolei w testach, bo testujemy dokładnie te same przypadki,
biorąc pod uwagę tylko różne zwracane wartości w zależności
od logiki biznesowej. Tak właśnie wygląda faktoring.
Testowanie zgodnie z zasadą LSB.