9

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

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

Теперь я в настоящее время увидеть, как это:

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

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.

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

+4

Выглядит неплохо для меня.Репозиторий - это правильное место для sql. Можете взглянуть на руководство Doctrine2 ORM только для идей. – Cerad

ответ

12

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

Repository Sequence Diagram from POEAA

Это довольно сложная картина. Вы можете найти хорошие рецензии о Repository в

Также проверьте Good Domain Driven Design samples

0

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

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

Смежные вопросы