Dice Wikipedia
"le entità software (classi, moduli, funzioni, ecc.) dovrebbero essere aperte per l'estensione, ma chiuse per modifica"
La parola funzioni ha attirato la mia attenzione, e ora mi chiedo se possiamo supporre che la creazione di un sovraccarico per un metodo possa essere considerata o meno un esempio del principio aperto / chiuso?
Lasciami spiegare un esempio. Considera che hai un metodo nel tuo livello di servizio, che viene utilizzato in quasi 1000 posti. Il metodo ottiene userId e determina se l'utente è admin o meno:
bool IsAdmin(userId)
Ora considera che da qualche parte è necessario determinare se l'utente è admin o meno, in base al nome utente, non userId. Se cambiamo la firma del metodo sopra menzionato, allora abbiamo rotto il codice in 1000 punti (le funzioni dovrebbero essere chiuse per la modifica). Quindi possiamo creare un sovraccarico per ottenere il nome utente, trovare userId 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?