Controllerクラスから直接呼び出されるDAOに対するさまざまな引数と、ModelクラスからのDAOに対するさまざまな引数を見てきました。実際、MVCパターンに従っている場合、コントローラーはDAOと結合するべきではなく、Modelクラス内部からDAOを呼び出し、コントローラーがモデルクラスを呼び出す必要があるのは、なぜWebアプリケーションからモデルクラスを切り離し、RESTサービスがモデルクラスを使用するなどのさまざまな方法で機能を公開できるからです。
コントローラでDAO呼び出しを記述する場合、RESTサービスが機能を再利用することはできません。両方のアプローチを以下にまとめました。
アプローチ#1
public class CustomerController extends HttpServlet {
proctected void doPost(....) {
Customer customer = new Customer("xxxxx","23",1);
new CustomerDAO().save(customer);
}
}
アプローチ#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);
}
}
注 -
モデルの定義は次のとおりです。
モデル:モデルは、アプリケーションドメインの動作とデータを管理し、その状態に関する情報の要求(通常はビューから)に応答し、状態を変更する指示(通常はコントローラーから)に応答します。
イベント駆動型システムでは、情報が変更されると、モデルはオブザーバー(通常はビュー)に通知して、反応できるようにします。
多くの場合、#1または#2を使用しているので、これについては専門家の意見が必要です。