/ / DDD - Restricción del repositorio para crear solo cierta entidad - c #, diseño impulsado por dominio, repositorios de ddd

DDD - Restricción del repositorio para crear solo cierta entidad - c #, diseño impulsado por dominio, repositorios de ddd

Tengo una pregunta importante sobre el repositorio y la entidad. ¿Debo restringir el repositorio para crear una entidad / raíz agregada específica (a través de repositorios genéricos como BaseRepository)?

En este momento, el repositorio base tiene acceso aobjeto de fábrica de la base de datos (no DbFactory sino personalizado) para recuperar cualquier POCO (no solo relacionado con la raíz agregada). Entonces, técnicamente, puedo crear cualquier entidad desde cualquier repositorio. Obviamente, como programador no lo hago pero definitivamente es posible. Entonces, ¿es necesario restringir el repositorio y permitirle crear una entidad específica? Tenga en cuenta que algunas entidades también tienen subentidades. Entonces, si restrinjo el repositorio para crear una entidad (a través de BaseRepository), ¿entonces cómo crear entidades secundarias?

Respuestas

1 para la respuesta № 1

Consideraría claro tener un Repositorio para cada raíz agregada en su Contexto delimitado.

Esto hará que sea obvio lo que es una raíz agregadaEn su aplicación se opone a lo que son (sub) entidades. De esta manera, se está protegiendo a usted mismo ya los demás para evitar que los agregados se accedan y utilicen a través de los repositorios.


2 para la respuesta № 2

Como @Jonas sugiere en su respuesta, crearía un repositorio por raíz agregada. Estos deberían ocultar todos los detalles de persistencia. Esto significa tomar entidades de dominio como parámetros y devolver entidades de dominio. Por lo general, la asignación de la entidad ORM a la entidad de dominio dentro del repositorio. Como efecto secundario, esto también le hace pensar en qué datos necesita, reduciendo algunos de los horrores que puede encontrar en DDD al tratar con entidades que tienen propiedades de carga lenta.

Evito el patrón de repositorio genérico, como dice en su publicación original, en DDD desea que su código documente su intención de diseño, no desea proporcionar un código que permita a los clientes / llamantes cargar cualquier entidad desde su base de datos. Además, la mayoría de sus entidades probablemente se construirán a partir de muchos tablas / recursos, que no se aplican bien al patrón de repositorio genérico.