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.
Litera I, czyli zasada Integrated Security Nation Principle zasada
segregacji interfejsów.
Zasada ta mówi nam o tym, że żaden klient nie powinien zależeć od
metody, której nie używa.
Co za tym idzie, żadna klasa, która korzysta z innej klasy jako zależności,
powinna mieć wgląd tylko w te metody, które są jej potrzebne.
Tzn.
Inaczej rzecz biorąc, kiedy zamawiamy na np.
catering dietetyczny do domu, interesuje nas to, jakie mają menu, a nie interesuje
nas jaka firma księgowa obsługuje ten nasz catering.
I idąc jeszcze inaczej, tłumacząc to jeszcze w inny sposób, spełniając
tę zasadę segregacji interfejsów.
Musimy dążyć do takiej konfiguracji, w której mamy wiele różnych interfejsów
specyficznych dla różnych klientów, po wiele interfejsów specyficznych dla
klientów jest o wiele lepszym rozwiązaniem niż jeden główny interfejs
ogólnego użytku lub taka klasa.
Mówimy o tym często o takim wzorcu gat object anty wzorcu zresztą,
w którym mamy klasę, która ma masę różnych metod, z których korzystają różni klienci,
różne inne klasy i ta klasa robi dosłownie wszystko.
Jedna zmiana w tej klasie pociąga za sobą konsekwencje wybuchu w
innej części aplikacji i np.
jeśli jedna klasa zależy od drugiej klasy, np.
poprzez wstrzyknięcie, to powinna być powiązana jak najmniejszym interfejsem lub
inaczej mówiąc powinna mieć wgląd tylko do tych metod i do tych pól, z których
faktycznie będzie korzystać.
I takie interfejsy i klasy, które są zależnościami, powinny zawierać
też te metody, które są potrzebne.
Powinny wiedzieć, w jakie miejsce zostaną rozstrzygnięte.
Nie możemy budować abstrakcji na zaś na może kiedyś się przyda.
Wobec tego klasa nie może zależeć od metod, których nie używa.
Powtarzam to jeszcze raz, żeby mocno to wybrzmiało.
Żeby interfejs komunikujący dwie klasy, dwie zależności był jak
najbardziej specyficzny.
Ta zasada może wydawać się skomplikowana, ale myślę, że przykład w kodzie
wszystko rozjaśni, więc zapraszam już teraz do kolejnego materiału.