【发布时间】:2012-12-16 17:42:08
【问题描述】:
我最近开始阅读有关数据映射器的文章,我发现的所有文章都只演示了 CRUD 操作,例如:
$user = new User('John', 'Joe', 'john@hotmail.com');
$userMapper->insert($user);
// or this...
$user = $userMapper->fetchById(239);
他们肯定应该做得更多吗?
目前在我的应用程序中,我使用 DAO(或类似的东西),例如,当我需要一个 $user 对象时,我的一个工厂创建了一个 $userDAO 对象并将其注入到我的 $user 对象中。并从我的$user 对象中进行查询,我只是这样做:
$this->userDAO->getNumActiveOrders($this->userId);
它将在$userDAO对象中进行查询并返回结果。
经过大量阅读,我的实现似乎是错误的,因为域对象不应该知道 DAO,反之亦然。我是对还是错?
如果这样做是错误的,那么我认为数据映射器必须用于更多的 CRUD 操作?
所以如果我想知道一个用户有多少活跃订单,我可以这样做:
$userMapper->getNumActiveOrders($userId);
这样对吗?
如果我想在我的 $user 对象中设置该值,我必须执行以下操作:
$user->setNumActiveOrders($userMapper->getNumActiveOrders($userId));
使用我的 DAO 实现似乎比使用数据映射器要快得多,并且使用的代码更少,但我可能错误地实现了数据映射器。
任何建议都会非常感谢。
【问题讨论】:
标签: php oop datamapper dao