转自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层的意义相关推荐

  1. Java Web学习总结(30)——Service层在MVC框架中的意义和职责

    mvc框架由model,view,controller组成,执行流程一般是:在controller访问model获取数据,通过view渲染页面. mvc模式是web开发中的基础模式,采用的是分层设计, ...

  2. java domain层_java框架中的controller层、dao层、domain层、service层、view层

    1.Controller层:接口层,用户访问请求时对接. Controller层负责具体的业务模块流程的控制,在此层里面要调用Serice层的接口来控制业务流程,控制的配置也同样是在Spring的配置 ...

  3. 关于service层、dao层,以及O/R Mapping之间的思考

    部门最近正式进入oo的开发,采用了类似于petshop4的层次结构,简单来说,service层调用dao(当然是用配置文件+反射的方式),dao通过ibatis.net完成从数据库中的table到do ...

  4. 实战SSM_O2O商铺_10【商铺注册】Service层的实现

    文章目录 概述 ShopService开发步骤 Service层接口类ShopService Service层接口实现类ShopServiceImpl ShopOperationException 单 ...

  5. action层,dao层,service层,domain层,util层,common层含义是什么?

    action为控制层,MVC中充bai当C角色,用来分配哪个业务来处理用du户请求. dao持久层,DB操作都写在这里. service层属于springmvc的service业务层. domian存 ...

  6. JAVA中Action层, Service层 ,model层 和 Dao层的功能区分

    首先这是现在最基本的分层方式,结合了SSH架构.model层就是对应的数据库表的实体类.Dao层是使用了Hibernate连接数据库.操作数据库(增删改查).Service层:引用对应的Dao数据库操 ...

  7. service层的作用

    一直不太明白service层的作用,有时候甚至感觉service层可有可无. dao层中已经有操作数据库的方法了,为什么还要service层去封装?有什么好处? 首先是mvc三层架构 mvc三层架构 ...

  8. springboot 注册dao层 service 层的三种方式,高级内容详解

    可以使用三种注解来引入DAO层的接口到spring容器中. 1.@Mapper,写在每一个DAO层接口上,如下: 2.@MapperScan和@ComponentScan两者之一.前者的意义是将指定包 ...

  9. java action dao_java中Action层、Service层和Dao层的功能区分

    一.Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DA ...

最新文章

  1. 机器学习泰斗迈克尔 · 乔丹:不是什么都叫AI的
  2. linux cpu占用100原因查询,如何根据查询异常时间节点和连接进而确定CPU使用率100%的原因...
  3. Java计算时间差、日期差总结(亲测)
  4. 类的继承私有成员问题
  5. php一对多聊天程序代码,微信小程序实现一对多发消息
  6. redis源码剖析(十三)—— dump.rdb文件分析
  7. 音乐美术计算机在中考,2022年音乐、美术进中考?教育部最新回应...
  8. 作者:窦勇(1966-),男,博士,国防科学技术大学并行与分布处理重点实验室常务副主任、研究员、博士生导师...
  9. POJ - 2069 Super Star HDU - 3007 Buried memory
  10. .Net程序员学习Linux最简单的方法
  11. 对象序列化与反序列化(二进制 byte[])
  12. html 怎么转换,html怎么转换成word?
  13. 页面风格设定参考——色彩及其效
  14. 给你一个网站你是如何来渗透测试的?
  15. 服务器 战地4 无限载入,战地4卡在loading界面无限载入的解决方法_快吧单机游戏...
  16. R包中文文本挖掘chinese.misc的中文说明
  17. AVR单片机网址推荐
  18. JavaWeb项目部署服务器并配置ssl证书教程
  19. 使用matlab绘制世界地图并根据经纬度绘制点位(附m_map的下载与安装说明)
  20. java什么是枚举_java中的枚举到底是什么鬼

热门文章

  1. 用计算机求函数公式,计算机常用函数公式
  2. HTTP/HTTP/HTTP
  3. android zip解压出错,常见的压缩解压文件出错解决办法
  4. vue3 props 声明默认值
  5. Ubuntu下安装XAMPP
  6. 硬件常见问题——信号过冲
  7. oracle数据库ORA-报错大全
  8. 解决Mac上MAMP Pro 80端口被占用
  9. Element UI是什么?基本用法
  10. 点点滴滴自学PS(一)批量去水印