Dipendenze nascoste:
function __construct($dep_registry){
$this->db = $dep_registry->get('db');
$this->request = $dep_registry->get('request');
...
}
Non così nascosto:
function __construct(Db $db, Request $request, ....){
$this->db = $db;
$this->request= $request;
...
}
Gli svantaggi degli ultimi sono che, se ho bisogno di cambiare la classe più tardi e ho bisogno di un'altra dipendenza, devo cambiare gli argomenti del costruttore. E se cambio il costruttore, devo anche cambiare ogni file che lo usa. Con i deps nascosti la modifica sarebbe necessaria solo nelle due posizioni: il costruttore e la classe di registro. Un altro errore del secondo metodo è che non è possibile alle dipendenze del carico pigro, devo sempre passare le istanze
Quindi qual è lo svantaggio dei dee nascosti e perché è più grande di questo svantaggio di quelli non così nascosti?
If you are using true Inversion of Control, then you shouldn't need to. If you need to add another dependency to the class, you should look back at what this class is doing. Perhaps you need a sub type instead. Adding dependencies could be an indication that you are breaking the Open-Closed Principal of programming (Open for extension, but closed for Modification).
OK, le dipendenze non dovrebbero essere nascoste era / è anche un principio. I principi sono tutti carini e tutti, ma cosa risolvono in realtà, oltre a non violare altri principi? Quindi, perché rompere il principio di Open-Closed cattivo (assumendo che questo è ciò che aggiunge un altro argomento al costruttore))