SOLID Single Responsibility Principle
Zasada pojedynczej odpowiedzialności. Klasa odpowiada tylko za jeden fragment logiki programu.
Przyjrzyjmy się temu na przykładzie klasy Pojazd:
Pojazd {
jedź()
zatrzymaj()
wymieńOlej()
sprawdźOlej()
zmieńKołaNaZimowe()
zmieńKołaNaLetnie()
kieruj()
umyj()
}
Taka klasa zwana jest też czasem „Boską klasą” albo „Klasą Bogiem”, ponieważ realizuje ona wszelkie dostępne funkcjonalności.
Zastanówmy się teraz nad tym za co klasa ta jest odpowiedzialna? Pojazd zmienia koła? Kieruje? Myje się? Zmienia olej? Raczej nie.
Rozdzielmy więc odpowiedzialności na dodatkowe klasy:
Pojazd {
jedź()
zatrzymaj()
}
Kierowca {
sprawdźOlej(Pojazd)
kieruj(Pojazd)
}
Mechanik {
wymieńOlej(Pojazd)
zmieńKołaNaLetnie(Pojazd, Koła [*])
zmieńKołaNaZimowe(Pojazd, Koła [*])
}
Myjnia {
umyj(Pojazd)
nawoskuj(Pojazd)
}
Pojazd – przemieszcza się – jedzie i zatrzymuje się
Kierowca – użytkuje pojazd – kieruje nim i sprawdza czasem olej
Mechanik – opiekuje się pojazdem – wymienia olej, zmienia koła na letnie/zimowe
Myjnia – utrzymuje pojazd w czystości – myje go i woskuje
Takie mniejsze fragmenty kodu, które odpowiadają za rozwiązanie tylko jednego problemu są łatwiejsze w utrzymaniu i istnieje większa szansa na ich powtórne wykorzystanie.
Zasada jest najprostszą z zasad SOLID ale jednocześnie jedną z trudniejszych do utrzymania. Wynika to z faktu, że w naszej naturze staramy się łączyć pojedyncze odpowiedzialności w jedną bardziej złożoną.
Open-Closed Principle – zasada otwarte-zamknięte stanowi, że jednostki oprogramowania tj. klasy, moduły, funkcje powinny być otwarte na możliwość rozszerzenia ale zamknięte na dokonywanie zmian.
Powinieneś tak zaprojektować oprogramowanie aby w razie potrzeby zmian nie modyfikować istniejącego kodu a tylko rozszerzać go o nowe, potrzebne funkcjonalności.