昨天在来吧程序猿l8chengxuyuan.com看到一篇对mvc文章的描述,结合别人的内容简单的总结
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的引入,更加清晰的定义了应用程序的边界,提供了一系列可以重用的操作集合。这对于网站的可扩展性和可维护性是非常有帮助的。
当然,如果网站的业务逻辑并不复杂,完全没必要用这样的设计。过度设计是万恶之源~
分享到:
相关推荐
完全开源 **项目基于:.Net Core 2.2 运行环境:vs2017 .Net Core 2.2 前端: BootStrap 3 、 Layer 、 Jquery 后端: .NetCore 2.2 MVC
this documents just descripte phone service(framework layer) and ril layer(includes RILJ layer and RILD, Vendor ril layer).
19054 Service Layer Entitlement TestSpec1.1.docx
资源分类:Python库 所属语言:Python 资源全名:servicelayer-1.0.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
一、使用时,请把文件夹layer整个放置在您站点的任何一个目录,只需引入layer.js即可,除jQuery外,其它文件无需再引入。 二、如果您的js引入是通过合并处理或者您不想采用layer自动获取的绝对路径,您可以通过layer...
A lightweight SAP Business One Service Layer client for .NET
LayerNorm是Transformer的最优解吗?.rar
Laravel开发-laravel-service-layer Laravel应用程序的轻量级服务层!
今天小编就为大家分享一篇浅谈layer弹出层按钮颜色修改方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
今天小编就为大家分享一篇浅谈bootstrap layer.open中end的使用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
资源分类:Python库 所属语言:Python 资源全名:servicelayer-1.3.3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
hybris Developer Training Part I - Core Platform - Module 08 - Programming with the ServiceLayer
一、请将layer整个文件夹放置你站点的任何一个目录,只需引入layer.js或layer.min.js即可,css等其它文件无需引入。 二、layer.js 开发版,layer.min.js 压缩版。引入其中一个即可。 三、如果您的js引入是...
1、openlayer加载百度地图高德地图 2、主要js代码 ol.js ol.css 3、web 端 gis 参考学习例子
开始使用你可以选择直接引入或模块加载layer,如果是采用Sea.js,方法如下var layer = require('layer'); //可先通过seajs.config配置好layer别名和路径当采用如上方式时,还需打开layer.m.js,修改path,以加载所需...
本文搜集的是本人在实际开发中所用到的layer窗口,未用到的layer按钮,请参考layer官网:http://layer.layui.com/ 一、layer的icon样式 以上样式测试代码: layer.confirm('icon测试', {icon: 1, title:'提示'...
一、使用时,请把文件夹 layer 整个放置在您站点的任何一个目录,只需引入 layer.js 即可,除 jQuery 外,其它文件无需再引入。 二、如果您的 js 引入是通过合并处理或者您不想采用layer自动获取的绝对路径,您可以...
layer3.5.1下载