Nerede benim modeli benim db nesne ayarlamanız gerekir?

3 Cevap php

Ben modeli ile benim db nesnesi ayarlamak için en iyi yer nerede olduğunu bilmek istiyorum.

Should I hard coded it since my model should be designed for one project, so i set it inside my constructor or wherever i do initialization ? or Should I pass my db object to my constructor when instancing my object ?

En iyi yolu nedir, ben tecrübe kullanıcıların demek ve verimli o beni kullanmak daha confort vereceğim?

3 Cevap

Birkaç şey:

  1. Bu ne olduğundan emin değilseniz, bir veritabanı bağlantısı, bir Singleton pattern kullanarak bu veritabanını temsil kullanan çoğu PHP projeler, o kadar okuyun.

  2. Genellikle kolayca ortamlarda (geliştirme, sahne, üretim) arasında değiştirilebilir bir yapılandırma dosyasında benim veritabanı bağlantıları tanımlar.

  3. Daha sonra yukarıda belirtilen Singleton deseni ve yapılandırma dosyasını kullanarak bir önyükleme dosyasında benim veritabanı bağlantısı örneğini olacak.

  4. Benim modelleri genellikle veritabanı / tablo veri deposu, her model için böyle bir şey tamamen soyut yapacağız olacaktır:

bootstrap.php

$config = load_config_data(ENVIRONMENT);

Db::setDefaultAdapter($config['database']);

Model/Table/User.php

class Table_User extends Db_Table 
{
  // Table name
  protected $_name = 'user';

  /* Do a bunch of database specific stuff */
}

Model/User.php

class User extends Model 
{
  public function updateUsername($userid, $username)
  {
    // Uses default adapter, Singleton pattern!
    $table = Db::loadTable('user');
    $table->update(
      array('username'=>$username),
      Db::quoteInto('userid = ?', $userid)
    );
  }
}

Bu oldukça fazla Zend Framework MVC, kodunu düzenlemek (ya da kendinizi biraz sorun kaydetmek için bazı fikirler için bunu kontrol ve aslında kullanmak istiyorsunuz {de Model için bir giriştir [(2)]}.)

Sınanabilirlik için, yerine sert kodlama daha yapıcı içine geçmek gerekir. Bu, DB nesneyi taklit edebilir çünkü birim testi yazmak için yardımcı olur.

Ben zor kod sadece canlı bir veritabanı için bir sınama veritabanından hareketli başka bir proje bulmak ve modeli sınıfında kodunu değiştirilmesi gerekebilir için hiç kullanılmamış olsa bile, bunu kod olmaz. Bu yapılandırma dosyasının çeşit yerleştirilen çok daha iyi olurdu.

Şahsen ben bir yükleyici olarak kullanmak ne olursa olsun tanımlanan db nesne olurdu - ve daha sonra model (ler) tek bu nesneyi kullanmak zorunda.