Guión:
- Pila: Java, Spring, Hibernate.
- Modelo: Aplicación Cliente-Servidor.
- Patrón: Modelo-Vista-Controlador (MVC).
Las clases de capa de servicio tienen tres comportamientos:
Algunos servicios tienen la regla de negocios dentro de los métodos y delegan la persistencia a la aplicación. Me gusta:
EntityManager.save (entidad);
Algunos servicios simplemente llaman a una función de base de datos (pasando parámetros) Como:
CallableStatement cls = con.prepareCall ("{call databaseFunction (args)}");
Algunos servicios tienen métodos con ambos comportamientos.
Mis preguntas:
- ¿Hay algún problema en hacer que los servicios de aplicaciones llamen, directamente, a las funciones de la base de datos? ¿No se considera esto una mala práctica? ¿Cuál sería un modelo de arquitectura aplicable a un proyecto como este?
- ¿Hay algún problema en que el comportamiento se mezcle en el mismo servicio? ¿Como transacciones y consistencia?
- En el caso del mantenimiento, ¿esta encapsulación hace que sea oscuro para el desarrollador que también debe cambiar las funciones en la base de datos? ¿Cómo evitar esto?
- ¿Este escenario ocurre en otras aplicaciones alrededor del mundo o fue solo un error arquitectónico?