DB connection Dependency Injection e metodi statici di creatore

2

Uso spesso metodi "factory" statici per creare oggetti dal database.

class Job {
  protected $objDb;
  public function __construct($objDb) {
    $this->objDb = $objDb;
 }

 public static function LoadArrayByProjectId($intProjectId, $objDd) {
   //some code that loads the jobs
   $objJob = new Job($objDb);
   $arr[] = $objJob;
   //end of loop
   return $arr;
 }

 public static function LoadArrayByUserId($intUserId, $objDb) {
   //similar code
 }

}

Quindi cerco di utilizzare Dependency Injection passando al costruttore $ objDb. Il problema è il parametro $ objDb nelle funzioni statiche. È molto fastidioso passare il param in giro.

Come gestisci questo caso? Ci sono soluzioni migliori?

    
posta danidacar 17.06.2013 - 21:33
fonte

1 risposta

1

Il fatto che ti sembri strano potrebbe essere un segno che non dovrebbe essere statico. È invece possibile incapsulare i metodi del caricatore in una classe non statica che accetta anche l'oggetto del database nel costruttore. Per me questo crea una forma più naturale di iniezione di dipendenza (nello stesso modo in cui hai fatto la classe Job). L'oggetto richiede tutto ciò di cui ha bisogno per svolgere il lavoro nel costruttore e non deve essere passato in alcun modo.

class Loader {
    protected $objDb;

    public function __construct($objDb) {
        $this->objDb = $objDb;
    }

    public function LoadArrayByUserId($intUserId) {
    }

    public function LoadArrayByProjectId($intProjectId) {
    }
 }
    
risposta data 18.06.2013 - 09:34
fonte

Leggi altre domande sui tag