Eu vi vários argumentos contra o DAO ser chamado diretamente da classe Controller e também o DAO da classe Model.Infato Pessoalmente, sinto que, se estamos seguindo o padrão MVC, o controlador não deve ser associado ao DAO, mas à classe Model deve invocar o DAO de dentro e o controlador deve invocar a classe de modelo. Por que, podemos dissociar a classe de modelo de um aplicativo da Web e expor as funcionalidades de várias maneiras, como um serviço REST para usar nossa classe de modelo.
Se escrevermos a chamada DAO no controlador, não seria possível para um serviço REST reutilizar a funcionalidade, certo? Resumi as duas abordagens abaixo.
Abordagem # 1
public class CustomerController extends HttpServlet {
proctected void doPost(....) {
Customer customer = new Customer("xxxxx","23",1);
new CustomerDAO().save(customer);
}
}
Abordagem # 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 -
Aqui está o que é uma definição de Model:
Modelo: O modelo gerencia o comportamento e os dados do domínio do aplicativo, responde a solicitações de informações sobre seu estado (geralmente da exibição) e responde às instruções para alterar o estado (geralmente do controlador).
Em sistemas orientados a eventos, o modelo notifica os observadores (geralmente visualizações) quando as informações são alteradas para que possam reagir.
Eu precisaria de uma opinião de especialistas sobre isso, porque acho que muitos usam o número 1 ou o número 2, então qual é?