Guardavo attraverso il codice sorgente di Orchard CMS Project e ho notato che alcuni dei loro costruttori non verificavano mai che il parametro richiesto non fosse nullo. All'inizio pensavo che fosse strano. Ho chiesto a me stesso: "Considerando che stai dicendo che questa dipendenza è richiesta, non vorresti controllare che ne hai effettivamente uno?" Rendendosi conto che il progetto utilizza Castle Windsor come contenitore IoC, in seguito pensai: "Bene, il contenitore avrebbe generato un'eccezione quando cercava di trovare la dipendenza per l'oggetto che aveva il requisito." Quindi la mia domanda è valida, dovrei controllare ancora quando so che un container IoC controllerà per me?Con un contenitore IoC, un costruttore dovrebbe ancora verificare se un parametro è nullo?
Oppure il doppio controllo è buono perché, in un certo senso, sto aderendo a un principio di incapsulamento inverso affermando: "Non so come sto ottenendo questa dipendenza, ma ne ho davvero bisogno!"
Ecco un interessante articolo di Mark Seemann su questo argomento: http://blog.ploeh.dk/2013/07/08/defensive-coding/ – Steven
Grazie per quello .... Sto diventando silenzioso il fan di Marco. Ho sempre detto che dovresti verificare i requisiti del metodo prima dell'elaborazione perché semplifica la risoluzione dei problemi quando si incontra un problema. – Chris
Per la verità, oggigiorno non controllo più gli argomenti del costruttore per le classi che sono cablate dal contenitore. So che il mio contenitore (e la maggior parte dei contenitori) non consentirà mai l'iniezione di null nel costruttore. Quindi lasciare fuori i controlli in quel caso è sicuro e rende il codice più leggibile, più mantenibile. – Steven