I localizzatori di servizio sono davvero così brutti?

1

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?

    
posta Katie 03.03.2012 - 12:59
fonte

1 risposta

3

Il motivo per cui i locatori del servizio sono malvagi è perché la tua classe in realtà non dovrebbe essere concessa con nessuno dei dettagli su come istanziare le sue dipendenze. Finirai con lezioni che conoscono troppo il modo in cui troppe cose sono difficili da separare. Inoltre, quando è necessario scambiare quella classe di database è disseminata di dozzine di file in dozzine di posti, piuttosto che in poche dichiarazioni di inizializzazione.

Nel caso delle funzioni GD *, il modo per gestirlo è creare una sorta di interfaccia e classe di adattatore che si occupi direttamente di chiamare GD *. Le tue lezioni parlano di questa interfaccia che può essere facilmente scambiata e derisa di cui hai bisogno. E non è necessario che venga effettivamente implementato completamente quando si scrive la linea principale del codice aziendale.

    
risposta data 03.03.2012 - 15:11
fonte

Leggi altre domande sui tag