Настройка шаблона хранилища в MVC - PullRequest
10 голосов
/ 12 февраля 2012

Я пытаюсь выяснить, как работает шаблон Repository и как его можно реализовать в пользовательском шаблоне MVC.

Насколько я понимаю, Repository - это слой, который просто возвращает данные изкласс сущностей или сохраняет класс сущностей в постоянном слое.

Теперь я вижу это так:

В мой контроллер поступает запрос на создание пользователя.Просто имя пользователя и пароль.Мой контроллер будет делать что-то вроде этого:

function CreateAction ( )
{
    $userRepo = new userRepository ( );
    $user = new userEntity ( );

    $user->setUsername('user');
    $user->setPassword('123456');

    $userRepo->create($user);
}

Тогда мой userRepository класс будет выглядеть так:

class userRepository
{
    public function create ( User $user )
    {
        $this->db->exec ( "INSERT INTO ... QUERY TO SAVE THE USER" );
    }
}

И мой userEntity классвыглядит следующим образом:

class userEntity
{
    private $username;
    private $password;

    public function setUsername ( $username )
    {
        $this->username = $username;
    }

    public function getUsername ( )
    {
        return $this->username;
    }

    public function setPassword ( $password )
    {
        $this->password = $password;
    }

    public function getPassword ( )
    {
        return $this->password;
    }
}

Теперь первое, что я считаю неправильным, это то, что я использую запрос внутри класса репозитория.Где я могу сохранить класс userEntity в базе данных?Другими словами, где я могу выполнять реальные запросы SQL?Я думаю, что правильным способом было бы вызвать DAO внутри метода 'create' хранилища.Но я все еще пытаюсь выяснить, как на самом деле выглядит DAO и насколько он отличается от «Модели» с точки зрения Модели в шаблоне MVC.

Но кроме этого, является ли это правильнымспособ реализации шаблона хранилища ??

Ответы [ 2 ]

12 голосов
/ 12 февраля 2012

Ваш репозиторий для меня больше похож на TableDataGateway.Идея репозитория заключается в том, чтобы быть еще одним слоем поверх слоя отображения, который является посредником между объектами домена и базой данных.Он также служит хранилищем в домене объектов домена (чего нет в вашем примере) и может инкапсулировать Factory для создания новых сущностей.Они также часто позволяют запрашивать репозиторий по шаблонам спецификаций:

Repository Sequence Diagram from POEAA

Это довольно сложный шаблон.Хорошие статьи о репозитории можно найти в

Также проверьте Примеры хорошего проектирования на основе домена

0 голосов
/ 12 февраля 2012

Да, это правильная реализация шаблона Repository. Шаблон DAO также часто полезен, но в вашей реализации нет ничего плохого.

DAO - это простой шаблон, который отделяет вашу логику постоянства от вашей бизнес-логики. Он будет создавать операции CRUD, в то время как ваша сущность будет содержать методы для вашей бизнес-логики, поэтому она отделяет обязанности персистентности от вашего домена. Я обычно использую DAO для отдельных сущностей и репозитории для агрегатов, что позволяет мне выполнять такие действия, как productCatalogRepository.Update (), который, в свою очередь, будет перебирать DAO продукта и заставлять их хранить себя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...