结合ssh谈MVC架构模式

结合ssh谈MVC架构模式 

2020.5.15

这学期在课程学习中我们接触到了ssh的开发框架,这个框架基于模型开发,由于目前MVC的开发模型渐成主流,所以我们来基于ssh深入了解一下MVC模型,首先我们来科普一下什么是ssh,什么是MVC?

ssh是一种框架,它指的是struts+spring+hibernate的集成框架,是以前一种比较流行的web应用程序开源框架,他在职责上分为四层:表示层,业务逻辑层,数据持久层和域模块层,这个框架可以帮助开发人员在相对较短的时间内搭建一个结构清晰,可复用性好,维护方便的web应用程序。在这个框架中,Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理struts和hibernate。

 结合ssh谈MVC架构模式

 

 

 

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
  通常模型对象负责在数据库中存取数据。

View(视图)是应用程序中处理数据显示的部分。
  通常视图是依据模型数据创建的。

Controller(控制器)是应用程序中处理用户交互的部分。
  通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

 结合ssh谈MVC架构模式

 

 

 

在了解了ssh和MVC之后,我们结合实例来聊一下MVC的好处。

在以往的Java编程中,我们其实经常用到MVC的架构模型,例如我们的JSP+servlet+JavaBean就是最典型的最简单的MVC模型,jsp作为‘v’,servlet作为‘c’,JavaBean作为‘m’,我们以一个小的简单得家庭记账本为例,对MVC进行分析。

首先我们看记账本的结构:

 结合ssh谈MVC架构模式

 

 

 

这里面的结构从上到下分别为:bean层对应MVC的control层,dao层,数据库管理,对应MVC的model层,servlet层以及jsp展示层,对应MVC的view功能,我们已添加一个资金流动为例结合ssh谈MVC架构模式

 

 

 结合ssh谈MVC架构模式

 

 

 

 

根据这个可以知道,这里面的数据会提交到Add的action中,对应上图的AddServlet,这个路径是由下面这句话决定的,因为WebServlet中写的是“/Add”,所以在跳转时action 的值要写“/Add”,这是servlet的一个用法,提交请求发送之后,这些数据与这个页面就没有联系了,完全交由下个页面处理,这便做到了客户操作与系统操作的分离,客户只需要看着屏幕去操作自己想要的步骤,而对于这些步骤是如何完成的客户是不需要知道的。

 结合ssh谈MVC架构模式

 

 

当数据提交到servlet层之后,数据在这里加工,比如存储到数据对象中,这一层中它只需要知道数据该如何处理,根据提交的请求不同,处理的方法不同,例如这里提交的是add请求,即要将传递的数据进行存储,此时,因为是对客户类进行存储,所以将这些数据存储到bean的对象中,调用bean,将其封装,至此,servlet获取数据,将其封装到bean层,再通过dao层调用对象,执行其具体的功能。在这个过程中,控制层完成了对数据的封装,加工,在此次之行中完美执行了MVC的架构概念:低耦合。

那这样的架构到底有哪些好处?

上面刚提到的:低耦合。

因为相互之间的交互减少了,层与层之间功能明确,界限明确,所以极大的降低了耦合度可维护性高因为层与层之间耦合度降低,在和维护的时候,可以在不改变其他组件的情况下对某些部件进行更改。部署快因为有了明确的部署结构,所以在部署的时候可以很快地将项目结构搭建完成,使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。

可与其他框架完美结合就像开始提到的SSH框架就是利用了MVC模型的特性进行开发,SSH框架集,是现在大多数软件设计过程中都会使用的一种框架集。而这种框架是基于MVC的开发,且MVC模式已经成为现代J2EE开发中的一种常用模式,且受到越来越多JSP、PHP等开发者的欢迎。

结合ssh谈MVC架构模式

上一篇:利用phar协议造成php反序列化


下一篇:对js的基础语法总结(持续更新)