白话Web项目与MVC设计理念

MVC框架不仅仅适用于web项目,但我以web项目为例,介绍MVC框架。

一、复杂Web项目的分工

1、简单项目开发

最原始的项目开发是一个页面包含了所有的功能,页面开发完了,项目也就完成开发了。页面中实现的功能包括什么呢?
从数据库中读取数据、把数据渲染展示、用户进行页面交互时进行响应。
简单的项目功能较少,开发任务不大,这样一个人统一负责可以搞定。

2、项目复杂后的开发问题

慢慢的网站越多越大,功能越来越多,所以web项目的开发工作量也就成倍成指数的增长,以前一个人可以搞定的工作,现在如果还一个人搞的话,工期就太长了。

(1)遇到的第一个问题,人手不够。

那该怎么解决呢?很简单,加人嘛。如果一个人开发需要一年完成,这个项目要求一个月完工,那就让12个人去一起开发。然后你会发现,一个月后,项目并没有按时完成,为什么呢?因为第一人与人之间交流需要时间、每个人开发的任务也可能有冗余。很可能十二个人用两个月才能完成开发。

(2)遇到了第二个问题,合作开发效率不高。

解决方法呢?分工,因为分工产生效能嘛。对每个人的分工越明确,人和人之间交流的成本就越低,职责就划分的越明确,扯皮的事情就越少发生。所以接下来就看如何做一个好的分工了。

(3)遇到了第三个问题,如果做一个好的分工

想要好的分工,就得充分了解要做的事情,所以接下来先看看一个web开发项目涉及到哪些开发工作吧。

3、web项目的开发工作梳理

数据是存储在数据库中的,最终是要展示给浏览器端的用户的。那么数据从数据库到浏览器页面的整个过程的各个环节就是开发工作的各个环节。

(1)数据库的增删改查工作

数据库的增删改查听着简单,实际上这个工作要想做好非常难,涉及到数据安全、互斥锁、缓存等等技术,所以整个数据库的增删改查工作可以从整个开发工作中分割出来,作为单独的模块开发,负责这块的开发人员通过各种技术实现数据库操作功能,别人想要数据时,不再需要自己动手,而是直接向负责数据库操作模块要数据就行;

(2)页面展示数据

页面拿到数据后通过各种手段渲染展示数据。也不要觉得这个工作简单。咱们看到好多炫酷的网页基于的基础数据其实是很简单的,但是经过页面的各种渲染和展示技术加工后,就变成了色彩纷呈的画面或图表了。涉及到的技术包括页面的数据、样式和交互技术,所以,整个页面开发工作也可以从整个开发工作中分割出来,作为单独的模块开发,这部分就是所谓的前端工作。
有了数据库操作员和前端开发员后是不是就可以开发了呢?还不行,因为前端开发员直接向数据库操作员要数据的工作还是很大。举个例子,前端就好比开商铺的,买来房子装扮一下放上货就是个门面了,数据库操作员就好比房地产商,让商铺老板直接去找房地产商买房子比较麻烦,需要房产中介中间牵线搭桥。同样的,前端和数据库端之间也主要一个牵线搭桥的。

(3)“中间商”连接数据库和页面

中间商的主要作用是翻译和传达工作。
将前端页面的请求翻译成对数据库的增删改查
将数据库返回的数据传达给对应的前端页面。
所以,一个web项目应该分成三个模块,数据库操作模块、前端开发模块和“中间商”的服务模块

二、MVC设计理念

把上面的分工思想提炼一下,就是MVC设计理念了。
以Web项目开发为例,开发的结果是用户在浏览器或者手机上可以浏览和点击的页面比如某宝。浏览器和手机端拿到的数据是一样的,只是展示的方式不一样。
那么浏览器和手机端拿到的数据是怎么生产出来的呢?这数据业务逻辑部分的工作了,一般数据都是存储在数据库中,通过对数据库的增删改查就可以实现具体的业务逻辑了。
那么数据库端生产出来的数据是怎么准确的传到浏览器和手机上呢?换句话说,数据库端怎么知道在用户搜索“皮鞋”时返回“皮鞋”关键字的搜索信息,在用户点击“购买”按钮时在下单数据库中新增一条数据呢?这就需要一个中间者,将页面的意图传递到数据库端,然后将数据库端返回的数据传回页面端。
MVC架构中的"M"、"V"和"C"就分别对应上述三部分工作。

1、Model

数据的管理者,

(1)Model会哪些

Model知道哪里有数据,也知道怎么获取数据。比如说,知道所有的皮鞋数据在“皮鞋表”里,知道男士皮鞋有10000种,知道如果新增加一个皮鞋品牌的话是往“皮鞋品牌表”里新增一条数据,也知道若某种皮鞋下架的话,要从“皮鞋品牌表”里面删除一条数据。
总结一下,Model掌握了有关数据的增删改查的各种技能。

(2)Model不会哪些

虽然Model掌握了数据操作的一身本领,但是它不知道什么时候该用哪项本领。
不知道什么时候查询、修改数据,不知道具体用什么条件查询数据,不知道新增数据时具体的数据值,也不知道删除具体哪条数据。

2、View

是拿到数据后,变着花样的展示给用户。

(1)View会哪些

View知道把数据用什么形式展示给用户,比如用表格、用柱状图、用带颜色的特定大小的文字等等;知道用户点击某个按钮时给用户什么反馈(点击保存按钮时,提示“保存成功”)、知道用户在页面上的操作是什么意思(比如,在皮鞋页面点击“男士”、“中年”标签,是想搜索中年男士的皮鞋)。

(2)View不会哪些

View只知道需要什么数据,不会自己获取数据。也就是说,View不生产数据,它只是数据的包装者,把干巴巴的数据包装成绚丽的图表、大小格式适中的文本。

3、Controller

controller是中间商,负责在View和Model之间递纸条。Model不会的,View会,View不会的而Model会,所以他俩需要合作完成功能。但是他俩之间交流困难,于是乎Controller这个递纸条的中间商就出现了。

4、具体业务流程

用户操作页面后,View知道了用户的需求,它把用户的行为翻译成Controller可以理解的数据需求写在纸条上,递给controller;
controller看了纸条的内容后,知道了这个需求具体要什么数据,也就知道了让Model干什么,于是他把纸条再以Model可以理解的方式翻译了一下,递给了Model;
Model拿到纸条后,知道了该用什么方法管理哪些数据了,就开始处理数据,处理后得到的结果再写在纸条上返回给Controller;
controller把Model的结果返回到View;
View拿到了数据,包装之后展示给用户。
白话Web项目与MVC设计理念

三、MVC框架在web开发中的应用

由于web开发项目的工作能很方便的按照MVC的理念分工,所以,一般大型的Wev项目都使用MVC原理。把MVC原理应用到实际的web开发中,流程之间的关系就变成了下面这样。
白话Web项目与MVC设计理念
V对应浏览器的JSP页面;
C对应控制器controller类
M就被细分成了业务逻辑(Service类)、数据模型实体类、数据存储和数据库。

在MVC架构中,JSP页面就是视图,用户通过JSP页面发送请求后,spring mvc会根据请求路径,将请求发给对应的controller类,controller类调用service类对请求进行处理,service类会调用数据持久层mybatis完成对实体类的存取和查询工作,并将处理结果返回到controller类,controller类将处理结果转换为ModelAndView对象,JSP接收ModelAndView对象并进行渲染。

四、一个web开发项目的三层框架

entity:实体层,与数据库的某个表相关联
dao:数据访问层,与数据库的增删改查等方法的相关代码写在这。一般dao层包含dao和daoImpl,分别为数据层接口和数据层实现类;
services:业务层,处理业务操作,可以与外部系统交流,算法的实现、图片的处理等。等于对dao和entity进行了包装。具体的服务类,能产生实际效果和影响的类放在此层;
impl:实现层,定义的接口,implements的缩写;
view:表示层,负责页面的渲染以及特效的显示等等;
util:是工具层,utility是存放工具类相关的Java代码的,比如采用filter过滤器,还有一些其他的相关小工具杂类亦存放于此。例如字符串处理、日期处理等工具类。
关于三层框架的讲解,个人感觉百无一用是情深的转载讲解的浅显易懂。