Wikipedia dice
"software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification"
La parola funzioni ha attirato la mia attenzione e ora mi chiedo se possiamo pensare che la creazione di un sovraccarico per un metodo possa essere considerato un esempio del principio Aperto / chiuso o no?
Lasciatemi spiegare un esempio. Considera che hai un metodo nel tuo livello di servizio, che viene utilizzato in quasi 1000 posizioni. Il metodo ottiene userId e determina se l'utente è admin o meno:
bool IsAdmin(userId)
Consideriamo ora che da qualche parte è necessario determinare se l'utente è admin o meno, in base al nome utente, non a userId. Se cambiamo la firma del metodo sopra menzionato, abbiamo interrotto il codice in 1000 punti (le funzioni dovrebbero essere chiuse alla modifica). Quindi possiamo creare un sovraccarico per ottenere il nome utente, trovare l'ID utente in base al nome utente e il metodo originale:
public bool IsAdmin(string username)
{
int userId = UserManager.GetUser(username).Id;
return IsAdmin(userId);
}
In questo modo, abbiamo esteso la nostra funzione creando un sovraccarico (le funzioni dovrebbero essere aperte all'estensione).
È un esempio di principio aperto / chiuso?