He visto varios argumentos contra el DAO que se llama directamente desde la clase Controlador y también el DAO desde la clase Modelo. De hecho, personalmente siento que si seguimos el patrón MVC, el controlador no debería acoplarse con el DAO, sino con la clase Modelo debería invocar el DAO desde dentro y el controlador debería invocar la clase de modelo. Por eso, podemos desacoplar la clase de modelo aparte de una aplicación web y exponer las funcionalidades de varias maneras, como para que un servicio REST use nuestra clase de modelo.
Si escribimos la invocación DAO en el controlador, no sería posible que un servicio REST reutilice la funcionalidad ¿verdad? He resumido los dos enfoques a continuación.
Enfoque n. ° 1
public class CustomerController extends HttpServlet {
proctected void doPost(....) {
Customer customer = new Customer("xxxxx","23",1);
new CustomerDAO().save(customer);
}
}
Enfoque n. ° 2
public class CustomerController extends HttpServlet {
proctected void doPost(....) {
Customer customer = new Customer("xxxxx","23",1);
customer.save(customer);
}
}
public class Customer {
...........
private void save(Customer customer){
new CustomerDAO().save(customer);
}
}
Nota -
Esto es lo que es una definición de Modelo:
Modelo: el modelo administra el comportamiento y los datos del dominio de la aplicación, responde a las solicitudes de información sobre su estado (generalmente desde la vista) y responde a las instrucciones para cambiar el estado (generalmente desde el controlador).
En los sistemas controlados por eventos, el modelo notifica a los observadores (generalmente vistas) cuando la información cambia para que puedan reaccionar.
Necesitaría una opinión experta sobre esto porque encuentro que muchos usan # 1 o # 2, ¿cuál es?