Где должна быть заложена логика настойчивости в Учении? - PullRequest
1 голос
/ 28 декабря 2011

Репозитории Doctrine - это место, куда ставятся запросы, если вы хотите поделиться ими со своим приложением.

Является ли хорошей идеей поместить в хранилище логику постоянства, чтобы хранилища были полезны не только для запросов, но и для создания и обновления объектов?

Есть ли другое место для логики постоянства, которого нет в самом контроллере?

1 Ответ

3 голосов
/ 28 декабря 2011

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

Просто простой пример:

class CommentService
{
    private $em;

    public function __construct(EntityManager $em)
    {
        $this->em = $em;
    }

    public function find($id) 
    {
        // do a query here or delegate to a repository
    }

    public function findByPost(Post $post)
    {
        // do a query here or delegate to a repository
    }

    public function save(Comment $comment)
    {
        // exec an operation here
    }

    public function delete(Comment $comment)
    {
        // exec an operation here
    }
}
...