『设计模式』Web程序开发最基本的编程模式--MVC编程模式
什么是MVC编程模式 ?
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中
MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。
后来多用于Web程序设计中,前端View提供数据模型展示和人机交互,Controller 接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。 起到了一个调度服务的作用。Mode模型层原来是包括数据和服务层,现在一般分开处理数据和服务层。
模型-视图-控制器模式是一个有用的工具箱,它有很多好处,但也有一些缺点。
MVC模式都出现了好久了,为啥还要学?
我问了几个工作了的程序员(不是什么大牛,说的不对可以指正)大厂和特殊的厂可能会玩一些的花的,但是很多公司仍是绕不开MVC和三层架构(不一样都是三个,千万不可混淆)。MVC仍是经典的Web开发的编程模式。
为什么GOF四人帮设计模式没有写这个设计模式?
我个人觉得主要是当时要解决的问题和后来的解决的问题不一样,随着时代发展,而生产出的这个设计模式。深挖一下不难发现MVC模式是组合模式、策咯模式、观察者模式的一个结合体。其中View
层,单独实现了组合模式,Model
层和View
层,实现了观察者模式,View
层和Controller
层,实现了策咯模式。
MVC应用
一个非常好的应用就是 Struts框架。 Struts是最早的Java开源框架之一,它是MVC设计模式的一个优秀实现。 Struts定义了通用的Controller(控制器),通过配置文件(通常是 Struts -config.xml)
Struts是最早的java开源框架之一,它是MVC设计模式的一个优秀实现。 Struts定义了通用的Controller(控制器),通过配置文件(通常是 Struts -config.xml)隔离Model(模型)和View(视图),以Action的概念以对用户请求进行了封装,使代码更加清晰易读。 Struts还提供了自动将请求的数据填充到对象中以及页面标签等简化编码的工具。 Struts能够开发大型Java Web项目。
图是在网上找的,不要骂我!
优点
1.耦合性低
视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。
2.重用性高
MVC模式允许使用各种不同样式的视图来访问同一个服务器端的代码,因为多个视图能共享一个模型,它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面使用。
3.部署快,生命周期成本低
MVC使开发和维护用户接口的技术含量降低。使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。
4.可维护性高
分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。
缺点
1.没有很明确的定义,完全理解MVC比较复杂。
现在学习处于断层,前边的人学完了扔了,后边的人不愿意用,到现在没啥可说的,时代就这样。
2.调试困难。
因为模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难,每个构件在使用之前都需要经过彻底的测试。
3.不适合小型,中等规模的应用程序
在一个中小型的应用程序中,强制性的使用MVC进行开发,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失,完全显示不出MVC的优点。
4.增加系统结构和实现的复杂性
对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
5.视图与控制器间的过于紧密的连接并且降低了视图对模型数据的访问
视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
6.效率问题
依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
7.毕竟是整合了三种设计模式,还是有一部分的缺点没有得到消除。
最经典的MVC实现
最典型的MVC就是jsp+servlet+javabean模式,也就是很多高校里讲的那种,有幸我就是一员。
JavaBean作为模型,既可以作为数据模型来封装业务数据,又可以作为业务逻辑模型来包含应用的业务操作。其中,数据模型用来存储或传递业务数据,而业务逻辑模型接收到控制器传过来的模型更新请求后,执行特定的业务逻辑处理,然后返回相应的执行结果。
JSP作为表现层,负责提供页面为用户展示数据,提供相应的表单(Form)来用于用户的请求,并在适当的时候(点击按钮)向控制器发出请求来请求模型进行更新,JSP虽然可以使用Html的功能,但是毕竟是动态的,效率还是有一定问题的。
Serlvet作为控制器,用来接收用户提交的请求,然后获取请求中的数据,将之转换为业务模型需要的数据模型,然后调用业务模型相应的业务方法进行更新,同时根据业务执行结果来选择要返回的视图。
这篇文章借鉴了不少,看了挺多的东西,才大致弄明白是什么意思,他不像其他的设计模式,这个只有一个定义,大概就是这个样子的,你按这个来。哈哈哈,一开始看的我挺蒙的,这是啥玩意,再看第二遍的时候,我就能明白了。如果不明白,多看几遍。