¿Cuánta responsabilidad debe mi repositorio / servicio tiene?
-
21-09-2019 - |
Pregunta
Tengo los siguientes objetos:
Persona <- Contacto -> ClientsPerson <- Cliente
Estoy usando el patrón de repositorio con una capa de servicio. Pero ya está aquí, ser un perfeccionista, estoy perdido!
También tengo una PersonService, ClientService y estoy bastante seguro de que necesita tener un ContactService que debe llamar a la personService.Add (persona) y clientsPersonService.Add (cliente) -? O
El trabajo consiste en añadir un contacto. El contacto tendría un objeto persona relacionada, y un objeto ClientsPerson. Y que sería ClientsPerson OFC. tiene un cliente.
¿Dónde deben los diferentes puestos de trabajo para ir? He oído que es malo para llamar a un servicio / repositorio de uno a otro.
Solución
Esta respuesta depende de su ORM y cómo lo guarda cascadas. Vamos a suponer que no está utilizando un ORM que las cascadas cambios.
Sus métodos capa de servicio deben reflejar las acciones que debe llevar a cabo a partir de un sentido comercial. Frecuentemente encuentro que mis acciones del controlador coinciden muy de cerca a los métodos de servicio.
En el ejemplo, me gustaría tener la acumulación de servicios y relacionarse con las entidades necesarias y hablar con los repos para salvarlos; de esa manera si hay un problema en el camino de hablar con los repositorios puede rodarse hacia atrás y hacer lo que es necesaria la limpieza.
Repos deben ser relativamente mudo. Los servicios deben hacer la relación y negocio de trabajo (salvo algo así como NHib, y tal vez incluso a continuación).