【问题标题】:What is the structure of a (Data Access) Service Class(数据访问)服务类的结构是什么
【发布时间】:2010-12-25 01:49:49
【问题描述】:

我了解到我应该使用服务类将实体持久保存到数据库中,而不是将此类逻辑放入模型/控制器中。我目前使我的服务类类似于

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();
    }
}

我想知道这是否应该是服务类的结构?服务对象在哪里代表实体/模型?或者也许我应该在每次我想要进行编辑时传递一个用户对象

public static function edit($user, $name) {
    $user->name = $name;
    $this->em->flush();
}

我正在使用 Doctrine 2 和 Zend Framework,但这应该没关系

【问题讨论】:

    标签: php zend-framework data-access-layer doctrine-orm


    【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多