MVC架构
mvc是一种架构模型,本身并没有新功能,只是对项目的一种规范,方便后期进行维护;mvc架构将模型(M),视图(V)和控制(C)割离开,这么做可以提高代码书写的效率和后期维护;
MVC分层次介绍
模型(MODEL)
模型负责封装应用的状态,并实现应用的功能; 封装的是数据源和所有对这些数据的操作; 在组件中,模型表示组件的状态和操作状态的方法。
模型通常分为数据模型和业务逻辑模型:
- 数据模型
数据模型主要存放业务数据,如订单,用户信息等。 - 业务逻辑模型
业务逻辑模型往往是对数据的处理,如订单和用户信息的修改。
mvc的三个部件中模型拥有处理的处理能力,安装上文所说,M可以连接和处理数据库。(EJBs和ColdFusion Components构建对象处理数据库)被模型返回的数据是中立的(模型于数据格式无关),这么一来一个模型可以被多个视图调用。可以减少代码的重复性。
视图(VIEW)
** 视图是将模型的内容呈现出来,用户可以通过对视图的操作进而操作模型,封装的是对数据源Model的显示;** 一个模型可以被多个视图复用,一个视图理论上也可以和多个模型进行关联; 视图从模型中获取展示的数据,然后用自己的方法展示给用户。如用户点击H5页面的登录,视图会给模型提交用户的数据,视图接收模型的数据,然后按照自己的方式展示给用户。
在实际WEB项目中,视图通常是HTML,XHTML,XML/XSL,WML代码组成的界面。 在MVC模式中,视图只是起到展示的作用,真正处理数据其实并没有发生。
控制器(CONTROLLER)
** 控制器时用来出来视图和模型关系的组件。封装的是外界对模型的操作。** 这些操作一般为转发给模型,模型处理数据,并调用模型中相应的一个或多个方法; 一般控制器是在模型和视图之间作为沟通的组件存在的。 用户填写完账号密码由控制器接收处理并转发给模型。可以让视图和控制器之间的耦合关系更加密切;严格的分工可以提高工作的效率。
当控制器接收到用户的请求之后,会将用户的数据和模型的更新相映射,也就是调用模型来实现用户请求的功能;控制器会选择响应应用的视图,把模型更新后的数据发送给视图,视图按照自己的方式展示给用户;
当点击WEB的超链接和发送HTML表单时,控制器本身并不传输任何数据,也不做任何处理。只是接收请求并决定调用哪个模型进行构建去处理请求,然后决定用哪个视图来显示模型返回的数据。
MVC的组件关系
根据上文的描述,Model和View是严格分开的,甚至他们之间互相不知道彼此。只有Controller作为中介连接他们两个。
视图里不会有逻辑的东西。控制器里没有展示的东西。一个模型会有很多的展示方法,每一个展示方法页不止一种模型。
比如:windows下打开文件夹;
文件夹的大图标小图标就是不同的视图但内容数据是一样的(模型数据一样); 点击进入其他的文件夹内,视图一样但是数据不同。
即–模型和视图之间并非一一对应的。
而Controller作为模型和视图之间的桥梁,可以保证模型和视图之间相互制约;点击视图的操作控制器立即给出相应;
MVC交互关系:
- 登入程序后,展示视图用户在视图上进行操作,填写业务数据
- 用户点击提交来提交发出的请求
- 视图发出的请求传到控制器,其中包含想要完成什么样的业务功能及相关数据
- 控制器处理用户请求并封装,选择合适的模型,请求模型来处理用户请求的数据,接收模型的更新,并选择接下来用哪一个视图进行展示这些数据
- 模型会处理用户请求的业务功能,同时进行模型状态的维护和更新
- 当模型进行更新后模型会通知相应的视图进行更新
- 当视图接收到模型的通知后,会向模型进行状态查询,获取需要展示的数据,然后按照视图的规则进行展示
- 等待用户的下一次操作,重复上面的操作
JAVA EE的MVC架构
MVC是一种横向分层的模型。采用MVC模式的用户不可以直接访问JSP视图,即使不需要调用业务逻辑功能,也应该让用户的所有操作都经过控制器,由控制器转到视图。
JAVA EE中视图层一般JSP实现一个交互性高的异步通信Web应用。 模型层:一般以JAvaBean为主体,实现Java的业务主体 控制器:用Servlet实现,
JavaEE中通常把Servlet+JSP+Javabean的模型称为Model2模型,基本划分如下:
- Javabean作为模型,既可以作为数据模型来封装业务数据,也可以作为业务逻辑模型来实现业务的操作;其中数据模型用来存储和传递业务数据。业务逻辑模型接收控制器传来的模型请求更新后,执行特定的业务逻辑 处理,返回相应的执行结果;
- JSP作为视图,负责提供页面给用户展示数据。提供相应的表单(Form)来相应用户的请求,并在适当的时候(比如用户点击提交按钮)向控制器发送用户请求来要求模型进行更新;
- Servlet作为控制器,用来接收用户提交的请求,并获取请求中的数据,将其转化为业务模型中需要的数据模型,然后调用业务模型中相应的方法,请求业务模型进行更新,同时根据业务执行的结果来选择需要返回的视图。发送数据给相应的视图JSP;
|