我已经看到了很多反对直接从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);
}
}
注意 -
这是Model的定义:
模型:模型管理应用程序域的行为和数据,响应关于其状态信息的请求(通常是从视图),并响应更改状态的指令(通常是从控制器)。
在事件驱动的系统中,模型会在信息更改时通知观察者(通常是视图),以便观察者可以做出反应。
我需要专家意见,因为我发现许多使用#1或#2,那是哪个?
1
控制器应加载模型中的所有内容并将其传递给视图。
—
jgauffin 2012年
“控制器可以将命令发送到其关联的视图,以更改模型的视图表示(例如,通过滚动文档)。它可以将命令发送到模型,以更新模型的状态(例如,编辑文档)。” .. emm ..在哪里说,控制器应该提取数据或将其传递?
—
mefisto