9

Estoy tratando de averiguar cómo funciona el patrón Repositorio y cómo se puede implementar en un patrón MVC personalizado.Configuración de un patrón de repositorio en MVC

Por lo que yo entiendo, el Repositorio es una capa que simplemente devuelve datos de una clase de entidad o guarda la clase de entidad en una capa persistente.

Ahora que actualmente lo ven así:

llega una petición en mi controlador para crear un usuario. Solo un nombre de usuario y contraseña. Mi controlador hacer algo como esto:

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

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

    $userRepo->create($user); 
} 

Entonces mi userRepository clase se parece a esto:

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

Y mi userEntity clase se ve así:

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

Ahora Lo primero que creo que está mal aquí es que estoy usando una consulta dentro de la clase del repositorio. ¿Dónde guardo realmente la clase userEntity en la base de datos? Entonces, en otras palabras, ¿dónde realizo las consultas SQL reales? Supongo que la forma correcta sería llamar a un DAO dentro del método 'crear' del repositorio. Pero aún estoy intentando descubrir cómo se ve realmente un DAO y qué tan diferente es comparado con un 'Modelo' en términos del Modelo en un patrón MVC.

Pero, aparte de eso, ¿es esta la forma correcta de implementar el patrón de repositorio?

+4

Se ve bastante bien conmigo.El repositorio es el lugar correcto para sql. Puede que desee echarle un vistazo al manual ORM de Doctrine2 solo por ideas. – Cerad

Respuesta

12

Su Repositorio se parece mucho a TableDataGateway para mí. La idea de un Repositorio es ser otra capa en la parte superior de la capa de mapeo que media entre los objetos de dominio y la base de datos. También sirve como almacenamiento en memoria de objetos de dominio (algo que falta en su ejemplo) y puede encapsular una fábrica para crear nuevas entidades. A menudo también permiten consultar el repositorio de patrones de Especificaciones:

Repository Sequence Diagram from POEAA

Es un patrón bastante complejo. Puede encontrar buenos escribir-ups sobre Repositorio de

También compruebe Good Domain Driven Design samples

0

Sí, se trata de una aplicación correcta del patrón Repositorio. El patrón DAO también es útil, pero no hay nada de malo en su implementación.

DAO es un patrón simple que separa su lógica de persistencia de la lógica de su negocio. Crearía operaciones CRUD mientras que su entidad contendría métodos para su lógica comercial, por lo que está separando las responsabilidades de persistencia de su dominio. Normalmente busco DAO para entidades únicas y repositorios para agregados, lo que me permite hacer cosas como productCatalogRepository.Update(), que a su vez iterará sobre los DAO del producto y los hará almacenar ellos mismos.

Cuestiones relacionadas