Какова структура класса обслуживания (доступ к данным) - PullRequest
1 голос
/ 25 декабря 2010

Я узнал, что я должен использовать классы обслуживания для сохранения сущностей в базе данных вместо того, чтобы помещать такую ​​логику в модели / контроллеры. В настоящее время я сделал свой класс обслуживания что-то вроде

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, но это не должно иметь значения

1 Ответ

1 голос
/ 27 декабря 2010

Я думаю, вы должны сначала рассмотреть, что вы хотели бы сделать с объектами пользователя. Например, если вы хотите только создавать, обновлять и удалять пользовательские записи (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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...