【发布时间】:2014-05-19 18:14:33
【问题描述】:
在过去的几天里,我阅读了很多关于域对象、数据映射器以及其他一些我不知道的东西。 我决定尝试在我正在编写的一些代码中实现这一点(部分是出于学习目的,部分是因为我想创建一个真正简化的框架来快速构建一些项目......使用我可以轻松理解和修改)。
在阅读了this 和this 之后,我计划创建一个单一的数据映射器,其中连接到数据库,然后使用工厂将数据映射器传递到每个域对象(嗯,那些需要它的人)。我在下面包含了一些示例代码
class data_mapper {
private $dbh;
function __construct()
{
$this->dbh = new PDO(DB_STRING, DB_USER, DB_PASS);
}
public function createUser($data) ...
public function updateUser($user_id, $data) ...
public function createCategory($data) ...
}
class user {
private $data_mapper;
public $user_id;
public $data;
function __construct($dm)
{
$this->data_mapper = $dm;
}
function someFunction() {
/* some code */
$this->data_mapper->updateUser($user_id, $data);
/* some more code */
}
}
class factory {
private $data_mapper = null;
function __construct($dm)
{
$this->data_mapper = $dm;
}
public function create($name)
{
return new $name($this->data_mapper);
}
}
/* USAGE */
$dm = new data_mapper();
$factory = new factory($dm);
$user = $factory->create('user');
我还有两个问题:
-
我查看的许多最近的示例为每个模型创建了不同的 data_mapper。我应该这样做吗?如果我这样做,那不会使工厂变得更加复杂(即我需要创建单个 PDO 对象并将其传递给每个数据映射器,然后将正确的数据映射器传递给每个模型)?
如果我上面的代码暴露了对模型、数据映射器或其他任何东西的理解上的一些缺陷,请赐教(我知道这不是一个真正的问题)...
【问题讨论】:
标签: php oop datamapper