转自

http://www.4u4v.net/mvc-simple-enough-on-the-introduction-of-service-dao-layer.html

MVC是web开发中常见的程序结构。

简单的mvc结构如下:

view层:显示层。

control层:业务层,集合了各种action。

model层:模型层,一般和数据打交道。简单的sample:一个表对应一个model类。

其中control层调用model层的方法,实现对数据的访问。

采用这样的结构在一定程度上,可以做到代码清晰,较容易扩展,代码的管理复杂度较低。

但是如果是业务很多,逻辑又很复杂的网站,如果再加上开发人员的水平参差不齐,那必然会导致下面的情况:

1action中的代码越来越长,逻辑越来越复杂,不同action之间看起来有很多可以重用的代码, 但是真要进行重构的话,又非常困难。

2model层中包含的方法越来越多,有些方法也过于复杂。甚至在不少方法中还包含了业务逻辑。

3代码的修改,还是牵一发而动全身。

4代码难以进行自动化测试。

本来以为引入了mvc,程序的管理复杂度问题就高枕无忧了,但现在又面临了相同的问题了。

以我最近的所学看,在mvc中再引入service层,可以在很大程度上避免或者缓解上述问题。

原有的mvc结构改成如下:

1view层:显示层。

2control层:业务层,集合了各种action。

3service层。

4DAO层。

原来的model层不见了,增加了service层和DAO层。DAO,即Data Access Object,数据访问接口,数据访问:顾名思义就是与数据库打交道。

在这个结构中,control不直接和DAO联系,

需要操作数据的时候,通过service层访问DAO层来实现。

service层做的事情,不仅仅是调用DAO操作数据,还会包含了一定的业务逻辑。整个程序的设计,也变成了针对服务进行设计。

这样做的好处是:

1control层中的action得以精简,因为action中的一些逻辑,被重构成一个个的服务。而不同的action也可以重用服务了

2只负责和数据打交道的DAO层,相比之前的model层,也得以精简(DAO层尽量只做最原子的数据操作,不同数据操作之间的联系,这边不考虑,那是service层的事情)。

3service层可以实现很大程度上的代码复用,程序的功能封装更清晰了。

4由于service层更加清晰的定义了应用程序的边界,那么对于各个service函数(对应某个服务/应用),要做到自动化测试就方便多了。WEB程序如何做到能方便的进行单元测试,这是一直困扰我的难题,这样的设计似乎真的可行了~

5开发人员的工作分配,理论上真的可以按层次划分了。只是理论上~

同时,这样的设计模式也是存在一定的缺点的:

层次太多,刚接触的开发人员理解起来比简单的mvc结构费时;

service层的设计需要一定的功力,因为action中和model层的逻辑在很大程度上转移到这里了。

但整体上看,service Layer的引入,更加清晰的定义了应用程序的边界,提供了一系列可以重用的操作集合。这对于网站的可扩展性和可维护性是非常有帮助的。

当然,如果网站的业务逻辑并不复杂,完全没必要用这样的设计。过度设计是万恶之源~

 

浅谈service、DAO层引入(转)的更多相关文章

  1. 浅谈Service层为何要有接口

    被人随意问了一句,为何每个service层都要写一个接口呢,多麻烦~虽然想说点什么,但是又不知道从何说起,只好从新整理一下思绪. 情景1:在开源框架中有很多这种情况,就是某个功能支持用户自定义扩展.说 ...

  2. 浅谈Service

    一.生命周期: startService()方式启动,Service是通过接受Intent并且会经历onCreate()和onStart().当用户在发出意图使之销毁时会经历onDestroy():( ...

  3. 安卓开发_浅谈Service

    一.Service(服务) Service是Android程序中四大基础组件之一,它和Activity一样都是Context的子类,区别在于它没有UI界面,是在后台运行的组件. public abst ...

  4. 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6621566 上一篇文章Android进程间通信 ...

  5. 浅谈OSI七层模型及ICP/IP四层模型

    1.OSI七层模型的概念 在网络历史的早期,国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)共同出版了开放系统互联的七层参考模型. 一台计算机操作系统中的网络过程包括从应用请求(在协议栈 ...

  6. 浅谈OSI七层网络模型和TCP/IP四层模型

    OSI七层网络模型 OSI(Open System Interconnection)开放系统互连参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系. OSI七层模型 功能 ...

  7. 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6627260 在前面一篇文章浅谈Service ...

  8. springboot 注册dao层 service 层

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

  9. 浅谈 kubernetes service 那些事(上篇)

    一.问题 首先,我们思考这样一个问题: 访问k8s集群中的pod, 客户端需要知道pod地址,需要感知pod的状态.那如何获取各个pod的地址?若某一node上的pod故障,客户端如何感知? 二.k8 ...

随机推荐

  1. List集合和Set集合UML图总结

    1.List和Set,用RationalRose展示 2.Map

  2. fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map

    作者:buster2014 推荐:长安散人 fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map JSON字符串与Java对象的转换 1.将Java对象或Java ...

  3. WebStorm 简单搭建NodeJs服务

    开始使用 WebStorm 搭建( WebStorm 请自行安装...... ) 在 项目 根目录 新建个 app.js 开始 编写 app,js // 引入 HTTP 模块 const http = ...

  4. 多任务udp聊天器完整版

    import socket import threading def send_msg(udp_socket,dest_ip,dest_port): while True: send_data = i ...

  5. 我们什么时候应该在C程序中使用指针?

    回答: 传递大型结构喜欢服务器请求或响应数据包. 实现链表和二叉树. 使用GPIO或硬件寄存器. 从函数中获取地址或更新值(通过引用调用) 创建动态数组. 使用函数指针创建回调函数. 注意:除此之外, ...

  6. python - Flask 上下文管理 流程

    上下文管理:    - 请求上下文 (ctx=RequestContext())  : request/session    - App上下文  (app_ctx=AppContext())  : a ...

  7. sql 存储过程set nocount on 的作用

    在存储过程中,经常用到SET NOCOUNT ON: 作用:阻止在结果集中返回显示受T-SQL语句或则usp影响的行计数信息.当SET ONCOUNT ON时候,不返回计数,当SET NOCOUNT ...

  8. MongoDB 如何使用内存?为什么内存满了?

    最近接到多个MongoDB内存方面的线上case及社区问题咨询,主要集中在: 为什么我的 MongoDB 使用了 XX GB 内存? 一个机器上部署多个 Mongod 实例/进程,WiredTiger ...

  9. Greenplum 调优--数据倾斜排查(二)

    上次有个朋友咨询我一个GP数据倾斜的问题,他说查看gp_toolkit.gp_skew_coefficients表时花费了20-30分钟左右才出来结果,后来指导他分析原因并给出其他方案来查看数据倾斜. ...

  10. Codeforces Round #525 (Div. 2)题解

    Codeforces Round #525 (Div. 2)题解 题解 CF1088A [Ehab and another construction problem] 依据题意枚举即可 # inclu ...