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.
Żeby dobrze zrozumieć, jak stosować zasadę solid na back endzie,
przejdziemy teraz szybkie wprowadzenie do samych zasad i omówimy to, czego dotyczą.
Więc samo słowo solid może się kojarzyć z angielskim słowem solidny
i nie bez powodu tak jest.
Zasady SOLID zasady kryjące się za tymi pięcioma literami sprawiają, że poprawne
ich zastosowanie pozwoli na tworzenie solidnego oprogramowania.
Jak to się dzieje? Zaraz się o tym dowiesz.
Więc zasady SOLID mówią nam o tym, w jaki sposób powinniśmy rozmieszczać kod.
Kod, który jest pogrupowane przez funkcje w klasy, w moduły, w struktury.
Jak rozmieścić ten kod i struktury danych w klasach, w obiektach,
w modułach, w naszym kodzie, w aplikacji?
Jak rozmieścić?
Można skrócić to, że zasady SOLID to są pewne wytyczne dotyczące porządkowania
kodu tak żeby wszystko było na swoim miejscu i było łatwe do
znalezienia i do podmiany.
Mówią nam o tym, w jaki sposób mają być powiązane klasy, w jaki sposób mają się ze
sobą komunikować, aby nie było silnych wiązań między tymi
klasami, aby kod był elastyczny, szybki w zmianie, łatwy w modyfikacji
i odporny na błędy.
Klasa w tym rozumieniu, w którym będziemy ją tutaj omawiać to pewna metoda
grupowania funkcji i danych w programowaniu w kodzie.
Więc o takich klasach będziemy dzisiaj rozmawiać.
Będzie to w dużej mierze oparte na programowaniu obiektowym, bo zasady SOLID
to są dobre praktyki, które są wykorzystywane właśnie w
programowaniu obiektowym.
I po co w ogóle będziemy stosować te zasady SOLID?
Zasady stolic stosujemy, aby nasze oprogramowanie dobrze znosiło zmiany,
to znaczy dobrze znosiło zmiany.
Zmiana powinna być łatwa, szybka do wdrożenia i stabilna, tzn.
jeśli zmieniamy jedną część systemu, to zmienia się dosłownie jedna część systemu,
a cały system jest w dużej mierze cały czas stabilny i nic się z nim nie dzieje.
Moja zmiana nie powinna powodować żadnych błędów w innych częściach systemu.
Nasze oprogramowanie powinno być łatwe do zrozumienia.
Zasady SOLID to pewien zbiór dobrych praktyk uznanych przez
społeczność, rozumianych tak samo przez programistów, niezależnie od języka
programowania, niezależnie od frameworka i niezależnie od kultury, języka,
komunikacji i pochodzenia.
To jest pewien zbiór uniwersalnych zasad.
I nie bez powodu odwołałem się na początku do Dekalogu, do dziesięciu przykazań,
które tak samo są rozumiane w każdej kulturze, tak samo będzie
rozumiane hasło nie zabijaj.
W każdej kulturze, bo dotyczy ono jednej konkretnej rzeczy, jest bardzo jasno
sprecyzowane i jasno starają się być sprecyzowane też zasady SOLID w
programowaniu i implementacja tych zasad SOLID jest
podstawą gry używanych komponentów.
W kodzie gry używane komponenty to takie komponenty, takie części kodu, zbiory
klas, które pozwalają nam na budowanie systemu na zasadzie klocków LEGO, że
możemy wziąć jeden komponent, przepiąć go w inne miejsce lub do innego systemu,
skopiować ten sam komponent i system będzie się zachowywał
stabilnie i przewidywalnie.
No i omówmy sobie krótko, bardzo krótko czego dotyczą te zasady?
Zasada numer jeden SRP Single Responsibility Principle,
czyli zasada pojedynczej odpowiedzialności według definicji mówi nam, że każdy moduł
powinien mieć jeden i tylko jeden powód do zmian Lub inaczej.
Każdy moduł, każda klasa, każda metoda powinny odpowiadać względem
tylko jednego aktora.
Lub jeszcze mówiąc prościej.
Każdy moduł, każda klasa, każda metoda powinny robić tylko jedną rzecz.
Jeśli coś robi tylko jedną rzecz, wtedy jesteśmy pewni, że nasz
system może być stabilny.
Jeśli idziemy do piekarza, kupujemy u niego bułkę, a nie oczekujemy,
że będzie miał jeszcze żarówki.
I o tym będzie nam mówiła zasada SRP.
Druga zasada to jest OCP Open Closed Principle po polsku zasada otwarte
zamknięte mówi nam o tym, że zmiana zachowania powinna zachodzić przez dodanie
nowego kodu, a nie modyfikację istniejącego lub według definicji,
o której mówi Robert Martin.
Nasze oprogramowanie powinno być otwarte na rozszerzenie, a zamknięte
na modyfikacje.
Powinniśmy go łatwo rozszerzać bez konieczności modyfikowania
wstecz istniejącego kodu.
O tym mówi nam zasada otwarte zamknięte.
Zasada numer trzy LSB blisko substytuty Principle Zasada podstawy Barbary List
Lisko to bardzo chwytliwa zasada, która definiuje nam
zasadę konstruowania wspólnych kontaktów między komponentami, między klasami
takich kontraktów, których wspólny kontrakt pozwala na zastępowanie
jednych elementów drugimi.
Będziemy mieć jeden wspólny kontrakt spełniane przez kilka elementów
i co pozwoli nam wymieniać te elementy w jednej konstrukcji na dokładnie takiej
samej zasadzie jak działają klocki Lego, gdzie mamy klocki o różnych kształtach,
ale sposób ich budowy, wypustki w klocki lego, dziurki
w ich strukturze sprawiają, że dowolne klocki możemy między sobą przypinać.
I to właśnie jest zobrazowanie tej zasady. ESP.
Kolejna zasada ESP.
ISP Interface Segregator Principle.
Zasada segregacji interfejsów będzie nam mówiła o tym, żeby unikać tworzenia takich
zależności, które będą powiązane z niepotrzebnymi elementami.
Będzie ona mówiła o tym, żeby nie zależeć od elementów, które są niepotrzebne.
Żeby nie budować zbyt rozbudowanych interfejsów.
Żeby nasze interfejsy klas w kodzie były możliwie jak najbardziej
wyspecjalizowane i o tym nam mówi zasada ISP.
I ostatnia z zasad Deep Dependency in Version Principle
zasada odwrócenia zależności.
Zasada uwielbiana przez programistów mówi nam o tym, że reguły biznesowe nie powinny
zależeć od szczegółów technicznych.
Powinny być wyizolowane i to szczegóły techniczne mogą być wstrzykiwać
do naszych reguł biznesowych dowolnie.
Dlatego mówiłem na początku, że zasady SOLID nie zależą od bazy danych i od
frameworka, bo niezależnie jaką bazę danych użyjemy, te zasady powinny mieć
dokładnie takie samo działanie i powodować dokładnie takie samo
zachowanie w naszym kodzie.
A na straży właśnie tego zachowania będzie stała ta zasada DIP.
O szczegółach będziemy mówić w kolejnych lekcjach.