S.O.L.I.D – 2. Zasada otwarty/zamknięty (O – open/close)
SOLID – Zasada otwarty/zamknięty – druga z wytycznych mających na celu ułatwienie pracy z kodem programu. Reguła ta opiera się na kodzie możliwym do rozszerzenia, ale zamkniętym na modyfikacje. Zasada szczególnie ważna w dużych projektach, nad którymi pracuje wielu ludzi. Aby zobrazować na czym polega omawiana reguła posłużmy się przykładem kodu PHP z klasą posiadającą metodę zapisującą tekst w danym formacie.
class TextSaver
{
public function save ($filetype)
{
if ($filetype == ‘doc’)
{
//save text to .doc
}
else if ($filetype == ‘txt’)
{
//save text to .txt
}
}
Aktualnie, jeżeli chcielibyśmy zapisać tekst w innym formacie niż .doc lub .txt to potrzebna byłaby ingerencja w już istniejącą klasę. A takie postępowanie jest niebezpieczne. Zmiana może mieć odzwierciedlenie w innym miejscu programu i powodować błędy. Wniosek z tego taki, że powyższy kod nie spełnia drugiej zasady zbioru SOLID – klasa nie jest zamknięta na modyfikacje. Prawidłowy kod powinien wyglądać następująco:
abstract class TextSaver
{
public abstract function save();
}
class DocTextSaver extends TextSaver
{
public function save()
{
//save text to .doc
}
}
class TxtTextSaver extends TextSaver
{
public function save()
{
//save text to .txt
}
}
W tym momencie utworzyliśmy klasę abstrakcyjną, która jest niemodyfikowalna. Po niej dziedziczą klasy odpowiadające za zapisanie tekstu do konkretnego formatu. W razie potrzeby zawsze można dodać kolejny format jako nową klasę, bez modyfikowania istniejącej już klasy TextSaver. A więc korzyści ze stosowania tej zasady widać szczególnie, gdy zmieniają się wymagania aplikacji lub konieczna jest jej konserwacja co jakiś czas.
Dziękuję za zapoznanie się artykułem dotyczącym pierwszej wytycznej SOLID – Zasada otwarty/zamknięty.
Zapraszam do kolejnego artykułu. Pochylimy się nad kolejną wytyczną jaką jest zasada podstawienia Liskov.