繁体   English   中英

我应该在模型中的什么地方设置数据库对象? (MVC)

[英]Where should i set my db object in my model ? (MVC)

我想知道在哪里用模型设置db对象的最佳位置。

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

我是经过实验的用户所说的最佳方式是什么,高效的使用方式会让我更加舒适?

几件事情:

  1. 大多数利用数据库连接的PHP项目都使用Singleton模式表示该数据库,如果不确定这是什么,请继续阅读。

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

  3. 然后,使用上述Singleton模式和配置文件在引导文件中实例化数据库连接。

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

bootstrap.php中

$config = load_config_data(ENVIRONMENT);

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

型号/表/ user.php的

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

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

型号/ 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)
    );
  }
}

这几乎是对Zend Framework MVC中Model的介绍,我将向您检查一下如何组织代码(或为自己节省一些麻烦并实际使用该框架 )方面的一些想法。

为了实现可测试性,您应该将其传递给构造函数,而不是对其进行硬编码。 这可以帮助您编写单元测试,因为您可以模拟数据库对象。

我不会硬编码它,即使从未将代码用于另一个项目,只是将其从测试数据库迁移到实时数据库可能也需要在模型类中定位和更改代码。 那最好放在某种配置文件中。

就个人而言,我将在用作引导程序的任何对象中定义db对象-然后让模型使用该单个对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM