【发布时间】:2012-07-05 04:50:15
【问题描述】:
我对设计模式的概念相当陌生,我正在考虑使用依赖注入和多态(因为每个都适用)——但是我有很多单例,虽然它们中的大多数可以很容易地更改,但我的 DBAL 不能.
DBAL 创建与数据库的连接的原因是——设置它自己的 PDO 对象。如果我将新的 DBAL 传递给每个需要它的类(相当多),我将获得多个不必要的数据库连接。
类是这样的
class DB {
/**
* Hold the PDO object
* @var PDO
*/
private $_db;
/**
* Hold the last error messages
* @var string
*/
private $_error_message = NULL;
/**
* Hold the last error code
* @var int
*/
private $_error_code = NULL;
/**
* Connects to the database server and selects a database
*
* @param string $user MySQL database user
* @param string $password MySQL database password
* @param string $name MySQL database name
* @param string $host MySQL database host
* @return bool
*/
public function connect( $user, $password, $name, $host ) {
// Connect
try {
$this->_db = new PDO( "mysql:host=$host;dbname=$name", $user, $password );
} catch ( PDOException $e ) {
$this->_error_message = $e->getMessage();
$this->_error_code = $e->getCode();
return false;
}
return true;
}
// ...
}
?>
会有很多类继承这个类——处理这个的最好方法是什么? (我是设计模式的新手)
【问题讨论】:
-
工厂模式应该注意在实例化时将其注入对象中(单独实例化/从业务逻辑构建对象树,如果没有“内联”则经验法则@ 987654322@ 工厂除外)。
-
@Wrikken -- 这在理论上对我来说是有道理的,只是不完全确定我将如何去做,你能给我一个工厂方法的例子吗?工厂是静态调用的吗?还是工厂是单身?
-
理想情况下,从测试的角度来看,您可能需要实例方法,但很难不陷入使所有内容都可以通过该实例访问的陷阱,从而使所有内容本质上都是全局的。我可以很好地忍受静态创建的“主要”对象,但在某种程度上,工厂(或特定的子工厂)本身也是您注入对象的东西。这很快就变得抽象了:P
-
@Wrikken -- 你有代码示例吗?对我来说有点太多了:)
标签: php design-patterns pdo singleton dbal