Pregunta

supongamos un controlador MVC simple muelle que recibe el ID de un objeto de dominio. El controlador debe llamar a un servicio que debería hacer algo con ese objeto de dominio.

¿Dónde "convertir" el ID del objeto de dominio en el objeto de dominio cargándolos desde la base de datos? Esto no debería ser realizada por el controlador. Así que la interfaz de método de servicio tiene que usar aceptar la ID del objeto de dominio en lugar del dominio propio objeto. Pero la interfaz del servicio sería mejor si se toma el objeto de dominio como parámetro.

¿Cuáles son sus pensamientos sobre este caso de uso común? ¿Cómo resuelves esto?

¿Fue útil?

Solución

El controlador debe pasar el id hacia abajo en la capa de servicio y luego volver a lo que sea necesario para hacer que el resto de la respuesta HTTP.

Por lo tanto -

Map<String,Object> doGet (@RequestParam("id") int id) {
     return serviceLayer.getStuffByDomainObjectId(id);
}

Todo lo demás es sólo va a estar contaminando la capa de tela, que no debe preocuparse en absoluto acerca de la persistencia. Todo el propósito de la capa de servicio es conseguir los objetos de dominio y decirle a llevar a cabo su lógica de negocio. Por lo tanto, una llamada base de datos debe residir en la capa de servicio como tal -

public Map<String,Object> getStuffByDomainObjectId(int id) {
    DomainObject domainObject = dao.getDomainObjectById(id);
    domainObject.businessLogicMethod();
    return domainObject.map();
}

Otros consejos

en un proyecto de mina utilicé la capa de servicio:

class ProductService {

    void removeById(long id);

}

Creo que esto dependería de si el servicio es local o remoto. Como regla Trato de pasar identificadores en lo posible de servicios a distancia, pero prefiero objetos para los locales.

El razonamiento detrás de esto es que reduce el tráfico de red que se envían solamente lo que es absolutamente necesario para los servicios remotos y evita que varias llamadas a DAO para los servicios locales (aunque con Hibernate almacenamiento en caché que esto podría ser un punto de silencio para los servicios locales).

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