看一个涉及后台数据库的项目时,我们往往会看到类似这样分层的结构。
名词解释:
Controller = 控制器
DAO = Data Access Object = 数据存取对象
Model = 模型
Service = 服务
Util = 工具
通常来说,完成一个大项目会把其分解 成很多不同的模块(Module),然后根据用途和角色,对这些模块有一个通用的命名规则,这也就是上面这些英文单词的来历。
所以,Ivony 提醒我们一定要记住,项目中是否包含这些模块或者单词,和你的项目结构是否完善一毛钱关系没有。但是当你的项目结构相对完善的时候,你会发现有这样一些角色的存在。
接下来一个个的来详细讨论一下这个东西是如何出现的:
(1)Model
模型 承载的作用就是 数据 的抽象,描述了一个数据的定义,Model的实例就是一组组的数据。整个系统都可以看成是数据的流动,既然要流动,就一定是有流动的载体。
Model就应该是 一个纯数据的集合,就是被各种东西传来传去,被各种加工处理的 数据团。
而这一项目处理过程(本文中这一包)中,需要的数据,在这里被定义。
其中生成getter与setter方法以后可能会总结。
(2)Util
Util通常来说就是工具,即 公用的方法,常常用来描述和业务逻辑没有关系的数据处理。由于和业务逻辑不相关,所以是个即插即用的方法,学习中积累Util是个好事。
其中Util 要有一个明确的输入和一个明确的输出结果。
如果实在不理解,那么和私有方法对比:私有方法一般来说是只是在特地场景下使用的。
(3)DAO
数据存取对象。简单来说就是把 SQL语句封装 在Dao层,和底层数据库通信,负责对数据库的增删改查。
Dao从来不关心这些数据要去哪里,他只关心入库,出库,查询和更换。
Dao的作用让我们和数据库的交道看起来比较像和一个对象打交道,当我们操作这个对象的时候,这个对象会自动的产生SQL语句来和数据库打交道,而我们只需要和DAO打交道就可以了。当然,从本质上来说,DAO并不需要和数据库有什么必然的联系,DAO只是数据存取对象的缩写,所以只要是 把数据持久化包装成一个对象的访问(读写),这种对象都可以被称之为DAO。
ColoDao即代表Dao层的接口, factory 实现接口和实现类的连接、implement是实现这个接口的类,所需求的SQL代码就在implement中实现。
(4)Service
提供业务功能。这一服务 “ 高度抽象和通用” ,只需要关注服务给出的接口 。
主要做逻辑判断,通过调用己对应的Dao层来对数据库进行访问。
所以服务的特征:抽象、独立、稳定。
(5)Controller
控制中心,所有的指令,调度都从这里发出去。把以上定义的所有内容,无论是数据还是逻辑实现调用。
比如:哪一个Service做什么事儿,谁的数据提供给谁。
public class ColoXServlet extends HttpServlet {
//Service
ColoService service = ServiceFactoryC.getService();
//Model
roinf all;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
// 设置响应内容类型
}
}
参考来源:
https://www.zhihu.com/question/58410621/answer/157049250
https://www.zhihu.com/question/58410621/answer/156868800