Zasada otwarte-zamknięte (Open-Closed Principle, OCP) to druga z zasad SOLID. Głosi, że moduły powinny dać się rozszerzać o nowe zachowania bez zmieniania istniejącego, przetestowanego kodu. Sformułował ją Bertrand Meyer w 1988 roku.
Jak ją zrealizować?
Kluczem są abstrakcje: interfejsy i klasy bazowe. Zamiast rozbudowywać długą instrukcję switch o kolejny typ płatności, tworzy się nową klasę implementującą wspólny interfejs. Istniejący kod nie zmienia się, a nowa funkcja dochodzi jako kolejna implementacja. Dobrym narzędziem jest wzorzec Strategia.
Korzyści
Zmniejsza ryzyko wprowadzenia błędów do działających fragmentów i ułatwia rozbudowę. Zespół może dodawać funkcje bez kolizji z istniejącym kodem.
Uwagi
Nie da się przewidzieć wszystkich kierunków zmian, a przedwczesne tworzenie abstrakcji przypomina nadmierne komplikowanie. Zasadę stosuje się tam, gdzie zmiany w danym miejscu się powtarzają.
Przykład w kodzie sklepu
Moduł naliczający rabaty z instrukcją warunkową dla każdego rodzaju promocji trzeba edytować przy każdej nowej akcji. W wersji zgodnej z zasadą każda promocja to osobna klasa z tym samym interfejsem, a moduł jedynie ją wywołuje. Dodanie rabatu „trzeci produkt gratis” oznacza napisanie nowej klasy, bez zmian w działającym kodzie. Zasada wiąże się z polimorfizmem: wywołujący nie zna konkretnych typów, tylko ich wspólny kontrakt.
Ma to bezpośredni związek z praktykami, na których opiera się pisanie czytelnego i zrozumiałego kodu.
Zobacz w praktyce
Clean Code - jak pisać czytelny i zrozumiały kod
Overengineering w stronach internetowych
Jak zmierzyć i spłacać dług technologiczny w projekcie Powiązane pojęcia
Wszystkie hasła z kategorii Programowanie i wzorce projektowe