mvc各层简单清晰的描述

view-controller-model

这是在学校就接触到的概念,在正式加入程序员队伍之前,我对其的理解也只仅仅停留在字面意思,即模型层+视图层+控制层。但是逐渐通过工作的磨砺,现在已经对其有了比较清楚的认识。 
其实按照用户请求的执行顺序应该从左向右依次为view-controller-model。

  • 视图层view:用于展示数据,与用户进行交互。
  • 控制层controller:用于分发控制到来的请求,并调用模型层与数据库进行交互,以及将数据返回给视图层展示。
  • 模型层model:数据模型,它与数据库进行交互,进行CURD操作。

如下图: 

这里模拟一个用户查询和新增的请求。 
当用户通过浏览器的web界面发起查询请求时,首先会被控制层controller分发,然后会调取相应的model层进行数据库查询。然后model层再将数据库查询到的数据返回给控制层,控制层再将其返回view层,view层web页面中进行显示。

view-controller-service-dao

以前,我一直认为可以直接在控制层就调用model层来进行数据库的交互。因为之前接触到的项目业务逻辑比较简单,所以直接在控制层就将很多工作都完成了。当我慢慢理解了MVC的分层架构后,我觉得这是不严谨的,耦合性太强了,违背了MVC的初衷,即解耦。所以随着MVC学习的深入,慢慢地又加入到了业务层service和数据访问层dao。那么上述的情景就可以有如下的表示: 

当请求来了,controller就会将相应的请求分发到相应的service层,在service层中再调用dao层进行数据库交互。这里的dao层其实就是之前的model层,封装了对数据库的操作。这样一来,就把业务处理逻辑从controller中分离出来,从而实现了解耦。

通过网上的了解,在有些项目中,其实也是没有完全按照分层进行架构,省略了service层,直接将业务逻辑与数据访问揉在了一起,这样其实是不便于扩展的,为了项目的架构清晰,易于管理,方便扩展,还是应该按照分层的架构来构建项目。

mvc各层简单清晰的描述相关推荐

  1. cml sml区别_如何简单清晰地描述 CAPM 在投资学中的运用,以及 CAL、CML 和 SML 的关系和区别?...

    如何简单清晰地描述 CAPM 在投资学中的运用,以及 CAL.CML 和 SML 的关系和区别? 2018-09-21 [姚岑卓的回答(41票)]: 想深入了解CML和SML,我们首先得先知道它们是怎 ...

  2. SSM框架中MVC各层的作用以及运行流程

    这篇博文主要介绍的是SSM(Spring.SpringMVC.Mybatis)框架中,MVC各层的作用以及各层之间的交互和框架整体运行流程. 一.MVC各层级间的作用及关系 表现层(springMVC ...

  3. 红黑树 键值_查找(一)史上最简单清晰的红黑树讲解

    http://blog.csdn.net/yang_yulei/article/details/26066409 查找(一) 我们使用符号表这个词来描述一张抽象的表格,我们会将信息(值)存储在其中,然 ...

  4. Spark数据挖掘-基于 LSA 隐层语义分析理解APP描述信息(1)

    Spark数据挖掘-基于 LSA 隐层语义分析理解APP描述信息(1) 1 前言 结构化数据处理比较直接,然而非结构化数据(比如:文本.语音)处理就比较具有挑战.对于文本现在比较成熟的技术是搜索引擎, ...

  5. 查找(一)史上最简单清晰的红黑树讲解 http://blog.csdn.net/yang_yulei/article/details/26066409

    查找(一)史上最简单清晰的红黑树讲解 2014-05-18 00:05 4037人阅读 评论(6) 收藏 举报 分类: 数据结构(7) 算法(4) 版权声明:本文为博主原创文章,未经博主允许不得转载. ...

  6. 描述常见的计算机硬件系统的构成,用简单的语言描述计算机硬件系统构成

    用简单的语言描述计算机硬件系统构成 用简单的语言描述计算机硬件系统构成 一.计算机硬件系统概述 所谓计算机硬件系统,就是指构成计算机看得见的,摸得着的实际物理设备. 常见的计算机硬件组成主要由下图各部 ...

  7. 用简单的语言描述C++ 是什么?

    用简单的语言描述C++ 是什么? 答:C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛.C++支持多种编程范式 --面向对象编程.泛型编程和过程化编程. 其编程领域众广,常用于系统开发,引 ...

  8. 爱上MVC~业务层刻意抛出异常,全局异常的捕获它并按格式返回

    对于业务层的程序的致命错误,我们一直的做法就是直接抛出指定的异常,让程序去终断,这种做法是对的,因为如果一个业务出现了致命的阻塞的问题,就没有必要再向上一层一层的返回了,但这时有个问题,直接抛异常,意 ...

  9. 初二数学勾股定理,八年级上册思维导图简单清晰

    编辑by脆脆鲨 在北师大版的教材中,勾股定理安排在了八年级数学上册的第一章进行学习,主要的内容可以分为"勾股定理"."勾股定理的逆定理"及"勾股定理的 ...

最新文章

  1. Mysql数据库中修改库名的的方法
  2. 从无到有算法养成篇-链式存储结构之循环链表
  3. java中junit_【Java】Junit快速入门
  4. javascript 传多个参数的正则表达式(用来获取某个参数值)
  5. MySQL Workbench运行脚本
  6. spring之@value设置默认值
  7. windows安装python2.7_Windows下安装python2.7及科学计算套装
  8. Jsp简单入门与Jsp实用教程总结
  9. 究竟什么是软件资产管理(SAM)?企业应该怎么做?
  10. [PDDL人工智能] 01.PDDL规划器安装及入门详解(规划领域定义语言)
  11. 【随笔】Linux刷脏页
  12. ballerina 学习 三十 扩展开发(一)
  13. 万字面试分享贴!从十二个角度解析面试全流程!附互联网公司Offer难度系数分析...
  14. [Solved] Splunk: Cannot get username when all users are selected“
  15. java实现附件预览(openoffice+swftools+flexpaper)
  16. 客快物流大数据项目(三十):软件下载后存放位置
  17. 历届上海国际电影节获奖名单
  18. 数据分析[1.2]--《深入浅出数据分析》1-分解数据
  19. 视频播放不流畅怎么办?使用CDN加速一步搞定!
  20. 【商业分析 03】疫情之下(20年初IT桔子投融资数据分析)

热门文章

  1. c语言数组冒泡排序程序的解释,c语言指针数组冒泡排序代码
  2. 【嵌入式Linux】嵌入式Linux应用开发基础知识之网络通信
  3. 学历史能学计算机吗,历史专业学计算机好吗
  4. war压缩命令_BetterZip mac版(超强解压缩软件)
  5. 并行计算(一)——初步认识
  6. DMA(direct memory access)控制方式
  7. flush什么意思中文翻译_flush是什么意思
  8. c#发送邮件,可发送多个附件
  9. [HAOI2010]软件安装(树形背包,tarjan缩点)
  10. Python 字符串语法,for