javaweb中action,service,dao,domain的解释(涉及MVC和三层架构)

文章一:
关于MVC结构中的action,service,dao,domain的解释:

这里是引用

service是业务层,dao是数据访问层。简单的说DAO层是跟数据库打交道的,service层是处理一些业务流程的
表示层调用控制层,控制层调用业务层,业务层调用数据访问层。
举个最简单的例子,你做一个分页的功能,数据1000条,你20条在一个页,你可以把这个功能写成工具类封装起来,然后在业务层里调用这个封装的方法,这才是业务里真正干得事,只要没访问数据库的,都要在业务里写。
比说你现在用的是SSH框架,做一个用户模块:
1、假设现在你做这个功能会用到user表和权限表,那么你前台的页面访问action,action再去调用用户模块service,用户模块service判断你是操作user表还是权限表,如果你操作的是user表则service的实现类就去调用userDAO。如果是操作的是权限表则调用权限的DAO
2、也就是说DAO一定是和数据库的每张表一一对应,而service则不是。其实你一个项目一个service和一个DAO其实也一样可以操作数据库,只不过那要是表非常多,出问题了,那找起来多麻烦,而且太乱了
3、好处就是你的整个项目非常系统化,和数据库的表能一致,而且功能模块化,这样以后维护或者改错比较容易,性能也高一些
为什么要用service层封装
我认为:一般来说,某一个程序的有些业务流程需要连接数据库,有些不需要与数据库打交道而直接是一些业务处理,这样就需要我们整合起来到service中去,这样可以起到一个更好的开发与维护的作用,同时也是MVC设计模式中model层功能的体现

初级DAO模式: 例如::写一个类 操作1张表 针对这张表的所有操作都以方法的形式写在这个类中
1个操作对应1个方法要求是外部通过调用这个类的方法达到操作某张表的目的时不需要写任何和数据库以及JDBC相关的代码,这个类的命名就是XXDAO。比如表叫做
t_goods 商品表那么操作它的DAO就叫GoodsDAO

高级DAO模式:
例如:即DAO工厂模式,多个XXDAO实现同一个接口或者继承同一个基类,编写一个工厂类通过工厂模式(简单工厂模式或利用反射动态加载均可)获得接口或基类对象,内部实际上封装返回的是具体的XXDAO类的对象。简单的说即是在1的基础上将创建具体的XXDAO对象的方式由new变为工厂模式实现
例如:UserDAO dao = DAOFactory.create(…); dao.save() dao.delete…
1.有一个dao接口,里面有平时的增删查该的方法
2.有一个具体的实体类
3.有一个dao的实现类,有对实体操作的方法,继承1的接口
4.如果有需要,还可以有一个工厂类,负责生产dao实现类 DAO层一般有接口和该接口的实现类! 接口用于规范实现类! 实现类一般用于用于操作数据库! 一般操作修改,添加,删除数据库操作的步骤很相似,就写了一个公共类DAO类 ,修改,添加,删除数据库操作时
直接调用公共类DAO类!

com.公司名.系统名.模块名

代码目录结构 Action : 负责页面逻辑,将调用service的结果返回到页面中 Service : 接口定义
—impl 接口的实现,负责业务逻辑 Domain 对应数据库表的pojo Dao : 只负责连接数据库,从数据库中查询结果,包装成对象后返回 util :工具类

文章二:
java EE的三层结构:web层、service层、dao层

我们常常提到java EE的三层或者四层结构。 四层架构: 展示层(web层)、业务逻辑层、数据访问层、信息资源层
四层架构在是开发企业应用时使用的非常经典的划分模式。
web层负责前端展示和用户请求的处理。mvc是一个设计模式,主要用户构建用户界面,目的是把展示逻辑和逻辑分离。web层通常会使用MVC模式进行构建,经常使用的mvc框架包括spring
mvc,struts等,都是在web层或者展示层使用的。
业务逻辑层一般应用中会有一层service抽象,实现核心业务逻辑,事务控制也在这一层实现。
数据访问层也即dao层,重点负责数据库访问,完成持久化功能。 信息资源层主要服务资源的存储。
所以mvc和四层(三层)结构有关系,四层架构是应用的体系(分层)结构,描述了整个应用的一个完整的划分,而mvc是一个设计模式,通常会用于四层架构的展示层的构建上。

文章三:
Java Web——MVC和三层架构

一、设计模式 Model 1 和Model 2

Model 1

前面学习了Servlet和Jsp,对这两个有个大概的认识,Servlet就是为了解决静态页面的问题,能够实现动态的页面,使维护,开发更加的方便,但是也有缺点,在Servlet嵌入HTML代码实在是太麻烦了,每次都要out.println();输出。所以就有了Jsp,JSP中的内容就是html,为的就是方便写html,写页面,本质上JSP也是一个servlet,所以在它中也会不可避免的要写一些java代码,也就是脚本,为了不让其那么混乱,就增加了标签,EL表达式来尽量代替脚本。但是在写一些项目时,还是会很麻烦,原因是业务逻辑代码,与数据库交互的代码,HTML代码这些类别,风格,作用完全不同的都混杂在了一起,造成的结果是代码的维护性,可读性以及扩张性都非常差,比如要改一个需求,那么必须要把全部代码都看完,理解到,不然你可能会因为修改了一处代码,导致别的地方多处错误,这种设计模式也叫做
模式一(Model 1),应该是以前技术还没那么好时才这样写的。

Model 2(MVC)

为了改进上面所说的缺点,也就是将业务逻辑代码放一起,显示页面的HTML代码放一起,与数据库交互的代码放一起,这样开发思路更加清晰,维护起来也更加方便,这种就叫做MVC模式,M:Model
模型,代表着业务逻辑代码与数据库代码,V:View 对数据的展示代码,比如JSP页面,就是专门用来展示数据,美化页面的
 C:Controller  控制,Servlet来充当这一角色,连接着View和Model,从View中获得指令,在从model中通过业务逻辑代码获取需要的数据,然后在通过Servlet去交给View层去显示。也就是MVC三层结构的意义

本来想自己画个图,但是奈何越画越复杂,就从网上找了一个个人觉得比较不错的图来进行讲解
javaweb中action,service,dao,domain的解释(涉及MVC和三层架构)

就这个图来分析一波,画的确实挺不错的,首先,我们打开浏览器,输入网址,就是到服务器中请求页面(JSP也可能是别的),然后显示到浏览器上,然后通过点击JSP页面上的内容,提交请求,到服务器中,也就到了Control(Servlet)这一块,Servlet通过分析请求,知道用户需要什么,需要数据,那么就通过Model,从数据库拿到数据,在将数据显示在JSP中,在将JSP发送回浏览器,显示在用户看,所以我们经常说,JSP就是View层,给用户看的,Servlet作为控制流程,而编写操作数据库代码,业务逻辑代码就属于Model。这就是MVC的应用。

二、经典三层架构

表示层(web层)、业务逻辑层(service层)、数据访问层(dao层),用一张图来描述这其中的关系
javaweb中action,service,dao,domain的解释(涉及MVC和三层架构)

因为现在只学习Servlet,Jsp,所以在表示层中就放的是Servlet和Jsp了,如果学了3大框架,Struts、Hibernate、Spring、会发现Struts是处理表示层的一个框架,而Hibernate是在dao层的一个框架,spring就是service层了。
javaweb中action,service,dao,domain的解释(涉及MVC和三层架构)

三、总结

1、经典三层架构和MVC的关系?

他们是两个毫无相关的东西,经典三层架构是一种分层思想,将开发模式分为了这三层,每个人根据自己的专长,开发不同的模块,比如,前端工程师,那么就专研表示层即可,想办法如何让页面变的更好看,如何吸引别人,而有些专门做数据库工作的人,就可以只关注操作数据库的活,如何让查询更加快速有效,而不必关注数据该如何显示这种问题。这就是分层带来的巨大好处。

而MVC是一种设计模式,目的是让HTML代码和业务逻辑代码分开,让代码看起来更加清晰,便于开发。

硬说他们有关系的话,只能说他们有共同的点,分层,解耦。

2、实际项目中的包命名结构,其也是按照三层架构思想来进行编写代码的,

脑袋里要保持着这种思想进行开发
javaweb中action,service,dao,domain的解释(涉及MVC和三层架构)

xxx:代表公司名称

yyy:代表项目名称

com.xxx.yyy.dao      dao层接口

com.xxx.yyy.dao.impl    dao层实现

com.xxx.yyy.service    service层接口

com.xxx.yyy.service.impl  service层实现

com.xxx.yyy.web      web层

com.xxx.yyy.util      工具包

com.xxx.yyy.domain    javabean