2012-02-15 14 views
6

Intento seguir DDD y tengo una clase de Pregunta y una clase de Comentarios (entre otros). Quiero poder contar la cantidad de preguntas, el número de retroalimentaciones y muchas otras cosas que se consideran metaoperaciones.Clase de repositorio en DDD

Si tales métodos "meta" están en el mismo repositorio que los otros métodos que pertenecen a la clase, o deberían estar en un MetaRepository donde tienes meta métodos diferentes que consultan la base de datos (en este caso todas las clases se mezclarán)?

+2

¿Qué diseño se asigna con mayor precisión a su dominio? – blueberryfields

+0

En realidad, pensé que ambos estaban bien. Esto todavía está en la pizarra así que estoy abierto para cambios :) Si tuviera que elegir sin que nadie me dijera qué hacer, pondría los métodos meta en las clases a las que pertenecen. – LuckyLuke

+0

¿Ambos se asignan igualmente a su dominio? Por ejemplo, las Preguntas/Comentarios pueden ser parte de algún tipo de contenedor, como un documento o un cuestionario. Es probable que el contenedor sepa cuánto contiene, de qué y puede querer el método de conteo. – blueberryfields

Respuesta

8

Nada en DDD prohíbe tener más de un repositorio por agregado. Simplemente puede tener un repositorio para consultas básicas y métodos de ciclo de vida (IQuestionsRepository) y un repositorio separado para lo que llama propósitos 'meta' o 'estadísticas' (IQuestionsStatistics). Esto funciona muy bien para dominios más grandes donde el siguiente principio de one-repository-por-agregado puede resultar en 'explosión del método' y violación de SRP. Seguir DDD no debe ir en contra de los principios básicos de OOP.

1

Para mí, cada repositorio es responsable de contar sus elementos, es un método entre getById, getAll ... (métodos estándar).

0

Son estas preguntas ("¿Cuántas retroalimentaciones?") Y las cantidades que se refieren a una parte importante de su dominio?

Si es así, parecen consultas razonables para poner en su repositorio. El trabajo de su repositorio, después de todo, es responder preguntas relevantes de dominio sobre los agregados que contiene.

De lo contrario, p. si esto es solo algo accesorio tal vez para mostrar al usuario, entonces estas preguntas podrían pertenecer en un servicio de aplicación, fuera de la capa de dominio por completo.

0

que se pegaba a más de un solo depósito por clase de modelo de dominio, o utilizar un repositorio genérico

Yo personalmente nunca he visto a nadie crear un MetaRepository con el propósito de que usted describe