Widziałem różne argumenty przeciwko bezpośredniemu wywoływaniu DAO z klasy Controller, a także DAO z klasy Model. Faktycznie osobiście uważam, że jeśli podążamy za wzorcem MVC, kontroler nie powinien być sprzężony z DAO, ale z klasą Model powinien wywoływać DAO od wewnątrz, a kontroler powinien wywoływać klasę modelu. Dlaczego, ponieważ możemy oddzielić klasę modelu od aplikacji sieciowej i udostępnić funkcje na różne sposoby, na przykład dla usługi REST, aby korzystać z naszej klasy modeli.
Jeśli napiszemy wywołanie DAO w kontrolerze, usługa REST nie będzie mogła ponownie użyć tej funkcji, prawda? Podsumowałem oba podejścia poniżej.
Podejście nr 1
public class CustomerController extends HttpServlet {
proctected void doPost(....) {
Customer customer = new Customer("xxxxx","23",1);
new CustomerDAO().save(customer);
}
}
Podejście nr 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);
}
}
Uwaga -
Oto definicja modelu:
Model: Model zarządza zachowaniem i danymi domeny aplikacji, odpowiada na prośby o informacje na temat jej stanu (zwykle z widoku) i odpowiada na instrukcje zmiany stanu (zwykle z kontrolera).
W systemach sterowanych zdarzeniami model powiadamia obserwatorów (zwykle wyświetla) o zmianie informacji, aby mogli zareagować.
Potrzebowałbym opinii eksperta na ten temat, ponieważ wiele osób używa numeru 1 lub 2, więc który to jest?