Pregunta

Descargo de responsabilidad: soy bastante nuevo en DDD y su terminología asociada, así que si estoy etiquetando mal algún concepto, corrígeme.

Actualmente estoy trabajando en un sitio con un modelo de dominio relativamente simple (elementos de catálogo, cada uno de los cuales almacena una colección de elementos de CatalogImage).

Mi repositorio sigue la interfaz estándar de FindbyID (int ID) GetAll () etc ...

El problema surge cuando se trata de encontrar una imagen en particular por su ID; Termino con métodos como FindImagebyID (int CatalogItemID, int ImgID)

A medida que se desarrollan nuevos requisitos, y el gráfico del objeto se vuelve más anidado, podría ver una explosión de métodos como Find {NestedType} ByID (int catalogItemID, ....., int nestedTypeID)

¿Debería simplemente devolver un IEnumerable del método FindAll () y usar Linq en una capa superior para formar estas consultas? ¿O será una violación de SoC?

¿Fue útil?

Solución

Me parece que tienes una justificación para construir múltiples repositorios.

Ejemplo

interface CatalogRepository
{
    Catalog FindByID(int ID);
}

interface CatalogImageRepository
{
    CatalogImage FindByID(int ID);
}

Esto separará adecuadamente sus inquietudes, ya que cada repositorio solo es responsable de saber cómo tratar con esa entidad específica.

Otros consejos

Filtraría el modelo en una capa sobre el repositorio, con LINQ si lo desea. Hace que el repositorio sea simple. Si está utilizando LINQ para obtener los datos de la base de datos, este método funciona muy bien, si tiene que usar ADO o alguna otra capa de acceso a datos heredada, podría dificultar que el repositorio sea tan simple. Linq lo hace fácil para que pueda hacer que el repositorio devuelva IQueryable y permita que la siguiente capa agregue el filtrado y la recuperación real de los datos no suceda hasta que se solicite. Esto hace posible tener un método en el repositorio como GetImages () que obtiene todas las imágenes, y la siguiente capa agrega el filtrado para una imagen específica. Si está utilizando ADO, es probable que no quiera recuperar todas las imágenes y luego filtrar ... así que podría ser una compensación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top