8

En DDD, uno de los conceptos clave es Repositorio, que le permite recuperar Entidades (o Raíces agregadas) y luego guardarlas nuevamente después de que se actualicen.¿Dónde pertenecen todas las operaciones "a granel" en DDD?

Supongamos que tenemos que realizar alguna operación 'masiva' con entidades, y el número de entidades hace que sea absolutamente imposible recuperarlas en la memoria. Es decir. la operación solo puede realizarse en la base de datos.

¿Dónde está el lugar para tal operación 'a granel'? ¿Debería ser un método en el repositorio? ¿No se "filtrará" la abstracción del repositorio con una operación específica de la base de datos? ¿No moverá la operación comercial de Entity a Repository?

+0

¿Está pidiendo realizar actualizaciones grandes en un conjunto de registros? (Digamos, calculando millones de precios con una sola declaración de actualización.) –

Respuesta

5

Creo que debería ser un servicio.

Evans recomienda en su libro, que cuando tenga dudas sobre si debe poner un método que "huele mal" dentro de una clase porque cree que no pertenece, haga una clase ServiceFoo con la operación adentro.

+0

Han pasado 9 años, espero que alguien pueda ayudar a responder esta pregunta de seguimiento. Cuando implementamos el servicio, ¿realiza un bucle de todo el agregado y lo guarda/agrega al repositorio luego? – Fajarmf

4
void DoLongInvolvedTask(); 

No veo nada de malo en poner tareas masivas como métodos en su repositorio. No filtran nada. Tener una operación masiva no implica ninguna operación específica de la base de datos, a menos que su método sea algo así como ReBuildMSSQLIndexesOnMyBigTable().

1

No debe tener ningún guardar, recuperar lógica en objeto de dominio (supongo que está utilizando el modelo de dominio). Esa es la responsabilidad de Repository. Entonces su método masivo pertenece al repositorio.

Si está utilizando ORM, sus repositorios no dependerán de la base de datos. sobresaldrían todas las solicitudes a la capa ORM.

Si está escribiendo su propio asignador, el repositorio reenviará la solicitud al asignador de la entidad. Y creo que este acoplamiento está bien.

2

Lo que necesita se llama service en diseño controlado por dominio. Los servicios se utilizan para modelar tareas de procedimiento. Una operación de actualización masiva, como la que describes, sería un candidato ideal para un servicio.

EDITAR: El enlace original desapareció. Aquí puede encontrar el glosario de términos DDD, pero no es tan útil como la página original. http://dddcommunity.org/resources/ddd_terms/

+0

el enlace al servicio DDD parece estar muerto (sin contenido en la página/dominio) – jasper

Cuestiones relacionadas