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.
Teraz pora na rozwiązanie zadania teoretycznego dla zasady
OCP otwarte zamknięte.
Dla przypomnienia dodam tylko, że rozwiniemy tutaj system zarządzania
użytkownikami z poprzedniej zasady z SRP, obsługę różnych typów użytkowników, dodamy
nowe typy stosując jak najmniej zmian w kodzie i przejdźmy teraz do
proponowanego rozwiązania.
Dalej rozwijamy to co było w zadaniu teoretycznym SRP.
Przejdę teraz do tej klasy głównej tego głównego pliku, który tutaj mamy i
zobaczysz, że pojawiły się nowe typy użytkowników.
Pojawił się admin Premium, user i guest i na podstawie tych typów tworzymy
sobie tablicę użytkowników.
Następnie każdego z tych użytkowników możemy wariować za pomocą
naszego validation.
A ja tutaj tylko pokażę, że Validation się w ogóle nie zmienił.
Nie zmieniło się też repozytorium.
Natomiast w katalogu users pojawiły się nowe klasy.
Przede wszystkim klasa user wygląda teraz trochę inaczej, bo stała
się klasą abstrakcyjną.
Będziemy teraz dziedziczyć po tej klasie abstrakcyjnej.
Doszła tutaj nowa metoda metoda User type, która zwraca odpowiedni typ użytkownika.
Typy te definiuje ten enum powyżej.
I teraz jeśli przejdziemy do admina, zobaczymy, że jest to klasa, która
dziedziczy po user a metoda User type zwraca nam User type admin.
Tak samo będzie dla gościa i tak samo będzie dla premium usera.
Jeśli chcielibyśmy dodać nowy typ użytkownika wystarczy, że zdefiniujemy
tutaj nowy typ enum i utworzymy odpowiednią klasę, która
będzie dziedziczyć nam po tej klasie.
Będzie to wyglądało mniej więcej w ten sposób user, który dziedziczy po user
i on będzie zwracał nam user type, który z kolei będzie user type new user.
Bardzo prosta implementacja.
Rozszerzamy istniejący kod, nie modyfikujemy klas, które już mamy.
To tyle jeśli chodzi o proponowane rozwiązanie zadania teoretycznego.
Dla zasady OCP.