PHP,  Projektowanie oprogramowania,  React.js

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.

Jestem mężem, ojcem, programistą, projektantem, analitykiem, amatorskim gitarzystą...

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *