service层的意义
转自bravezhe的专栏
MVC是web开发中常见的程序结构。
简单的mvc结构如下:
view层:显示层。
control层:业务层,集合了各种action。
model层:模型层,一般和数据打交道。简单的sample:一个表对应一个model类。
其中control层调用model层的方法,实现对数据的访问。
采用这样的结构在一定程度上,可以做到代码清晰,较容易扩展,代码的管理复杂度较低。
但是如果是业务很多,逻辑又很复杂的网站,如果再加上开发人员的水平参差不齐,那必然会导致下面的情况:
1 action中的代码越来越长,逻辑越来越复杂,不同action之间看起来有很多可以重用的代码, 但是真要进行重构的话,又非常困难。
2 model层中包含的方法越来越多,有些方法也过于复杂。甚至在不少方法中还包含了业务逻辑。
3 代码的修改,还是牵一发而动全身。
4 代码难以进行自动化测试。
本来以为引入了mvc,程序的管理复杂度问题就高枕无忧了,但现在又面临了相同的问题了。
以我最近的所学看,在mvc中再引入service层,可以在很大程度上避免或者缓解上述问题。
原有的mvc结构改成如下:
1 view层:显示层。
2 control层:业务层,集合了各种action。
3 service层。
4 DAO层。
原来的model层不见了,增加了service层和DAO层。DAO,即Data Access Object,数据访问接口,数据访问:顾名思义就是与数据库打交道。
在这个结构中,control不直接和DAO联系,
需要操作数据的时候,通过service层访问DAO层来实现。
service层做的事情,不仅仅是调用DAO操作数据,还会包含了一定的业务逻辑。整个程序的设计,也变成了针对服务进行设计。
这样做的好处是:
1 control层中的action得以精简,因为action中的一些逻辑,被重构成一个个的服务。而不同的action也可以重用服务了。
2 只负责和数据打交道的DAO层,相比之前的model层,也得以精简(DAO层尽量只做最原子的数据操作,不同数据操作之间的联系,这边不考虑,那是service层的事情)。
3 service层可以实现很大程度上的代码复用,程序的功能封装更清晰了。
4 由于service层更加清晰的定义了应用程序的边界,那么对于各个service函数(对应某个服务/应用),要做到自动化测试就方便多了。WEB程序如何做到能方便的进行单元测试,这是一直困扰我的难题,这样的设计似乎真的可行了~
5 开发人员的工作分配,理论上真的可以按层次划分了。只是理论上~
同时,这样的设计模式也是存在一定的缺点的:
层次太多,刚接触的开发人员理解起来比简单的mvc结构费时;
service层的设计需要一定的功力,因为action中和model层的逻辑在很大程度上转移到这里了。
但整体上看,service Layer的引入,更加清晰的定义了应用程序的边界,提供了一系列可以重用的操作集合。这对于网站的可扩展性和可维护性是非常有帮助的。
当然,如果网站的业务逻辑并不复杂,完全没必要用这样的设计。过度设计是万恶之源~
service层的意义相关推荐
- Java Web学习总结(30)——Service层在MVC框架中的意义和职责
mvc框架由model,view,controller组成,执行流程一般是:在controller访问model获取数据,通过view渲染页面. mvc模式是web开发中的基础模式,采用的是分层设计, ...
- java domain层_java框架中的controller层、dao层、domain层、service层、view层
1.Controller层:接口层,用户访问请求时对接. Controller层负责具体的业务模块流程的控制,在此层里面要调用Serice层的接口来控制业务流程,控制的配置也同样是在Spring的配置 ...
- 关于service层、dao层,以及O/R Mapping之间的思考
部门最近正式进入oo的开发,采用了类似于petshop4的层次结构,简单来说,service层调用dao(当然是用配置文件+反射的方式),dao通过ibatis.net完成从数据库中的table到do ...
- 实战SSM_O2O商铺_10【商铺注册】Service层的实现
文章目录 概述 ShopService开发步骤 Service层接口类ShopService Service层接口实现类ShopServiceImpl ShopOperationException 单 ...
- action层,dao层,service层,domain层,util层,common层含义是什么?
action为控制层,MVC中充bai当C角色,用来分配哪个业务来处理用du户请求. dao持久层,DB操作都写在这里. service层属于springmvc的service业务层. domian存 ...
- JAVA中Action层, Service层 ,model层 和 Dao层的功能区分
首先这是现在最基本的分层方式,结合了SSH架构.model层就是对应的数据库表的实体类.Dao层是使用了Hibernate连接数据库.操作数据库(增删改查).Service层:引用对应的Dao数据库操 ...
- service层的作用
一直不太明白service层的作用,有时候甚至感觉service层可有可无. dao层中已经有操作数据库的方法了,为什么还要service层去封装?有什么好处? 首先是mvc三层架构 mvc三层架构 ...
- springboot 注册dao层 service 层的三种方式,高级内容详解
可以使用三种注解来引入DAO层的接口到spring容器中. 1.@Mapper,写在每一个DAO层接口上,如下: 2.@MapperScan和@ComponentScan两者之一.前者的意义是将指定包 ...
- java action dao_java中Action层、Service层和Dao层的功能区分
一.Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DA ...
最新文章
- 机器学习泰斗迈克尔 · 乔丹:不是什么都叫AI的
- linux cpu占用100原因查询,如何根据查询异常时间节点和连接进而确定CPU使用率100%的原因...
- Java计算时间差、日期差总结(亲测)
- 类的继承私有成员问题
- php一对多聊天程序代码,微信小程序实现一对多发消息
- redis源码剖析(十三)—— dump.rdb文件分析
- 音乐美术计算机在中考,2022年音乐、美术进中考?教育部最新回应...
- 作者:窦勇(1966-),男,博士,国防科学技术大学并行与分布处理重点实验室常务副主任、研究员、博士生导师...
- POJ - 2069 Super Star HDU - 3007 Buried memory
- .Net程序员学习Linux最简单的方法
- 对象序列化与反序列化(二进制 byte[])
- html 怎么转换,html怎么转换成word?
- 页面风格设定参考——色彩及其效
- 给你一个网站你是如何来渗透测试的?
- 服务器 战地4 无限载入,战地4卡在loading界面无限载入的解决方法_快吧单机游戏...
- R包中文文本挖掘chinese.misc的中文说明
- AVR单片机网址推荐
- JavaWeb项目部署服务器并配置ssl证书教程
- 使用matlab绘制世界地图并根据经纬度绘制点位(附m_map的下载与安装说明)
- java什么是枚举_java中的枚举到底是什么鬼