Qual è lo svantaggio dell'uso della classe astratta come connettività di database in zend framework 2 invece di localizzatore di servizi

0

Se utilizzo il database creando una scheda con i driver, inizialo in una classe astratta ed estendo la classe astratta al modello richiesto. Quindi utilizzare la dichiarazione di query semplice. In questo modo:

namespace My-Model\Model\DB;
abstract class MysqliDB {
    protected $adapter;

    public function __construct(){ 
        $this->adapter = new \Zend\Db\Adapter\Adapter(array(
                'driver' => 'Mysqli',
                'database' => 'my-database',
                'username' => 'root',
                'password' => ''
        ));
    }

}

E usa una classe astratta di database come questa nei miei modelli:

class States extends DB\MysqliDB{

    public function __construct(){
        parent::__construct();
    }
    protected $states = array();

    public function select_all_states(){
        $data = $this->adapter->query('select * from states');
        foreach ($data->execute() as $row){
            $this->states[] = $row;
        }
        return $this->states;
    }
}

Sono nuovo nel framework zend, prima di avere esperienza di lavoro in YII e Codeigniter. Mi piace l'object oriented in zend quindi voglio usarlo in questo modo. E non voglio usarlo attraverso il servizio di localizzazione di qualcosa del genere:

 public function getServiceConfig(){
        return array(
            'factories' => array(
            'addserver-mysqli' => new Model\MyAdapterFactory('addserver-mysqli'),
            'loginDB' => function ($sm){
                $adapter = $sm->get('addserver-mysqli');
                return new LoginDB($adapter);
            }
        )
        );

    }

Nel modulo. Sono d'accordo con questo approccio?

    
posta arslaan ejaz 21.10.2013 - 08:01
fonte

1 risposta

1

Le classi astratte non vengono condivise.

Il vantaggio principale del localizzatore di servizio in questa istanza è che una richiesta aprirà un solo adattatore al database e condividerà quell'adattatore con tutti gli oggetti che lo richiedono. Mentre nella tua struttura di estendere dalle classi astratte ogni istanza imposterà un nuovo adattatore per eseguire le sue istruzioni sul database.

$states1 = new States();
$states2 = new States();

Esistono due connessioni database separate.

    
risposta data 14.08.2014 - 03:58
fonte

Leggi altre domande sui tag