Le persone dicono che i localizzatori di servizio sono cattivi perché espongono le dipendenze in qualche metodo casuale dalla classe (e non negli argomenti del costruttore come dovrebbe):
class A{
function F(){
DB::query(...)
}
}
invece di
class A{
protected $db;
function __construct(DB $db){
$this->db = $db;
}
function F(){
$this->db->query(...);
}
}
Ma considera una funzione, come imagejpeg()
da GD. Ovviamente non puoi "iniettare" quello, quindi devi chiamarlo da qualche parte nella tua classe, proprio come il tuo servizio. Quindi non è la stessa cosa? Quella funzione è anche una dipendenza.
O che dire dell'istanziazione di un oggetto nei nostri metodi di classe, come il PDO. Dopotutto, queste cose non sono esattamente come i servizi? Quindi perché tutto il trambusto sui localizzatori di servizi è malvagio?