¿Estamos usando el patrón de repositorio correcto?

14

Estamos usando un grupo de clases separadas con el sufijo -repository para recuperar los datos de la base de datos; para cada tabla su propio repositorio.

Tenemos, por ejemplo, una clase customerrepository que tiene todo tipo de métodos para recuperar clientes, y un vacancyrepository que tiene todo tipo de métodos para recuperar vacantes.

Tengo dos preguntas sobre esta forma de hacer las cosas:

  1. ¿Qué hay de obtener datos que abarquen varias tablas? Por ejemplo, tengo una pantalla que muestra a todos los clientes que aún no han creado una vacante. ¿Puede un customerrepository usar métodos del vacancyrespository , o hacer que ambos repositorios devuelvan resultados y hay una clase más alta en la jerarquía (llamémosla dataservice ) que obtiene los resultados de ambos repositorios y los combina en 1 resultado ?

  2. ¿Cuánta lógica puede manejar este repositorio?
    Creo que está bien implementar el 'donde activo == verdadero' en un repositorio para recuperar solo registros activos, ¿o incluso esa simple lógica debería ser manejada por una clase más alta en la jerarquía (llamémosla dataservice )?

El ejemplo que estaba encontrando ahora es este:

Tenemos una lista de preguntas, que contiene una o más preguntas.
La pregunta puede tener un resultado, que se mantiene en una tabla separada.
Entonces, cuando quiera recuperar el resultado total de la lista de preguntas, debe combinar los datos de la tabla questionlist , la tabla de preguntas y la tabla questionstatus .

Ahora mismo tenemos 3 repositorios diferentes para estas tablas.

Si le preguntara a questionlistrepository cuál es el resultado total de la lista número 12, tendría que obtener datos de otros dos repositorios y, por lo tanto, tener algo de lógica, ¿está permitido?

¿O hay un questionlistdataservice que sabe qué repositorios usar?

Una cosa más: nuestros repositorios pueden dar como resultado IQueryable , por lo que un servicio de llamadas puede combinar fácilmente los resultados, pero ¿qué tal cuando este no sea el caso? No creo que sea una buena idea recuperar todo el contenido. de las tres tablas de la base de datos.

    
pregunta Michel 22.01.2013 - 09:02

1 respuesta

14

Repository devuelve objetos de dominio y está construido sobre las capas de mapeo. Para un dominio muy simple, los objetos de dominio y las tablas de base de datos pueden ser muy parecidos.

Si su repositorio siempre devuelve una representación exacta de su estructura de datos, en realidad podría ser Puerta de enlace de datos de tabla también conocida como acceso a datos Objeto (DAO).

Ejemplo: Su base de datos tiene tablas por persona y dirección. En su aplicación, la dirección del dominio no es una entidad propia, es solo una propiedad de la Persona. En este caso, no tendría PersonRepository y AddressRepository. Sólo tienes PersonRepository. El dominio no debe preocuparse de cómo se conservan los datos del dominio. Esas responsabilidades están en una capa detrás del repositorio.

Por su ejemplo, parece que en realidad tiene DAO y los acaba de nombrar Repositorios.

    
respondido por el simoraman 22.01.2013 - 09:22

Lea otras preguntas en las etiquetas