代码之家  ›  专栏  ›  技术社区  ›  Boris Guéry

我应该在模型中的何处设置db对象?(MVC)

  •  1
  • Boris Guéry  · 技术社区  · 15 年前

    我想知道在哪里设置带有模型的db对象是最好的。

    我应该硬编码它,因为我的模型应该是为一个项目设计的,所以我在我的构造函数中或者在我初始化的任何地方设置它? 在实例化对象时,是否应将db对象传递给构造函数?

    我的意思是,对于经过实验的用户来说,什么样的方法是最好的,而且高效的,这会让我使用起来更方便?

    3 回复  |  直到 15 年前
        1
  •  2
  •   davetron5000    15 年前

    两件事:

    1. Singleton pattern ,如果您不确定这是什么,请仔细阅读。

    2. 通常,我在配置文件中定义数据库连接,该文件可以在不同环境(开发、阶段、生产)之间轻松更改。

    3. 然后,我将使用前面提到的单例模式和配置文件在引导文件中实例化我的数据库连接。

    4. 我的模型通常会完全抽象数据库/表数据存储,对于每个模型,我将执行以下操作:

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

    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)
        );
      }
    }
    

    这几乎是对 Model Zend Framework MVC ,我会查看它,了解一些关于如何组织代码的想法(或者省去一些麻烦,实际使用 framework

        2
  •  1
  •   oscarkuo    15 年前

    对于可测试性,您应该将其传递到构造函数中,而不是硬编码。这有助于编写单元测试,因为您可以模拟DB对象。

        3
  •  0
  •   Tim Lytle    15 年前