我了解到我应该使用服务类将实体持久化到数据库中,而不是将这些逻辑放在模型/控制器中。我目前使我的服务类类似于
class Application_DAO_User {
protected $user;
public function __construct(User $user) {
$this->user = $user
}
public function edit($name, ...) {
$this->user->name = $name;
...
$this->em->flush();
}
}
我想知道这应该是服务类的结构吗?服务对象表示实体/模型的位置?或者我每次想要进行编辑时都应该传递一个User对象
public static function edit($user, $name) {
$user->name = $name;
$this->em->flush();
}
我正在使用Doctrine 2& Zend Framework,但不应该重要
答案 0 :(得分:1)
我认为您应该首先考虑您要对用户对象做什么。例如,如果您只想创建,更新和删除用户记录(CRUD),我可以想象这种类型的API:
<?php
public function create (array $data = null)
{
$user = new User($data);
$this->_persist($user)
->_flush();
return $user;
}
public function update (User $user, array $data)
{
foreach ($data as $name => $value) {
$user->$name = $value;
}
$this->_flush();
return $user;
}
public function delete (User $user)
{
$this->_remove($user)
->_flush();
}
我将方法分离到实体管理器,您可以创建类似下面的内容或完全跳过分离的方法。使用这些方法,您可以进行额外的检查(例如,如果您想要持久化,可以检查是否已经保留了对象)。
protected function _persist ($obj)
{
$this->_em->persist($obj);
return $this;
}
protected function _detach ($obj)
{
$this->_em->detach($obj);
return $this;
}
protected function _remove ($obj)
{
$this->_em->remove($obj);
return $this;
}
protected function _flush ()
{
$this->_em->flush();
return $this;
}