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.