Wikipedia mówi
„jednostki oprogramowania (klasy, moduły, funkcje itp.) powinny być otwarte na rozszerzenie, ale zamknięte na modyfikację”
Słowo funkcje złapany oczy, a ja teraz zastanawiam się, czy możemy założyć, że tworzenie przeciążenie dla metody można uznać za przykład otwarty / zamknięty zasady czy nie?
Pozwól mi wyjaśnić przykład. Weź pod uwagę, że masz metodę w warstwie usług, która jest używana w prawie 1000 miejscach. Metoda pobiera userId i określa, czy użytkownik jest administratorem, czy nie:
bool IsAdmin(userId)
Teraz rozważ, że gdzieś trzeba ustalić, czy użytkownik jest administratorem, czy nie, na podstawie nazwy użytkownika, a nie identyfikatora użytkownika. Jeśli zmienimy podpis wyżej wspomnianej metody, złamaliśmy kod w 1000 miejscach (funkcje powinny być zamknięte na modyfikacje). W ten sposób możemy utworzyć przeciążenie, aby uzyskać nazwę użytkownika, znaleźć identyfikator użytkownika na podstawie nazwy użytkownika i oryginalną metodę:
public bool IsAdmin(string username)
{
int userId = UserManager.GetUser(username).Id;
return IsAdmin(userId);
}
W ten sposób rozszerzyliśmy naszą funkcję, tworząc dla niej przeciążenie (funkcje powinny być otwarte na rozszerzenie).
Czy to przykład zasady otwartej / zamkniętej?