Mała seria, w której przejdziemy przez dobre praktyki pisania kodu. Na pierwszy rzut SOLID. Postaram się rzucić prostymi przykładami (w PHP i Pythonie), aby lepiej zrozumieć SOLID.
Poniżej ku pamięci, czym jest SOLID? Wg wiki jest to mnemonik zaproponowany przez Roberta C. Martina znanego w branży pod pseudonimem „Uncle Bob„, twórcę m.in. kultowej książki „Czysty Kod„, oraz innych książek, opisujący pięć podstawowych założeń programowania obiektowego:
- S – Single Responsibility Principle
- O –
- L –
- I –
- D –
SINGLE RESPONSIBILITY PRINCIPLE
:: zasada pojedynczej odpowiedzialności
Założeniem jest, aby każda z klas miała jedno przeznaczenie, tylko jeden cel i jedną odpowiedzialność. Proponowanym rozwiązaniem jest stworzenie kilku mniejszych klas, która każda odpowiedzialna za coś innego. Ta praktyka jest szczególnie pomocna w utrzymaniu kodu i jego dalszym rozwoju. Zwiększasz jego czytelność i użyteczność.
<?php declare(strict_types=1); class Person { ... public function test() { ... }
#Open/closed principle
:: zasada otwarte-zamknięte
Każda klasa czy funkcja powinna być otwarta na rozszerzenia, ale zamknięta na modyfikacje. Co to oznacza w praktyce? Od początku mamy pisać w ten sposób, aby możliwe było dodawanie nowych metod w klasie, rozwijanie jej funkcjonalności bez jakichkolwiek późniejszych zmian w systemie. W przypadku rozbudowanych systemów, zawierających sporo klas i funkcji, modyfikacja nawet jednej małej metody może spowodować nieprawidłowe działanie innych elementów programu.
#Liskov substitution principle
:: zasada podstawienia Liskov
Funkcje, korzystające z obiektów klasy bazowej, muszą być w stanie używać również obiektów klasy pochodnej, bez dokładnej znajomości tych obiektów.
#Interface segregation principle
:: zasada segregacji interfejsów
Wiele dedykowanych interfejsów jest lepsze niż jeden ogólny.
#Dependency inversion principle
:: zasada odwrócenia zależności
Wysokopoziomowe moduły nie powinny zależeć od modułów niskopoziomowych – zależności między nimi powinny wynikać z abstrakcji.
Świetny blog! Dziękuję za dzielenie się wiedzą. 🙂