当前位置:首页 > 服务端 > MVC设计模式

MVC设计模式

2022年09月17日 13:41:04服务端8
MVC是一种目前广泛流行的软件设计模式,早在70年代,IBM就推出了Sanfronscisico项目计划,其实就是MVC设计模式的研究。近来,随着J2EE的成熟,它正在成为在J2EE平台上推荐的一种设计模型,也是广大 Java 开发者非常感兴趣的设计模型。MVC模式也逐渐在PHP和ColdFusion开发者中运用,并有增长趋势。随着网络应用的快速增加,MVC模式对于Web应用的开发无疑是一种非常先进的设计思想,无论你选择哪种语言,无论应用多复杂,它都能为你理解分析应用模型时提供最基本的分析方法,为你构造产品提供清晰的设计框架,为你的软件工程提供规范的依据。
  
   MVC设计思想
  MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。
  
  视图(View)代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML、XML和Applet。随着应用的复杂性和规模性,界面的处理也变得具有挑战性。一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理。比如一个订单的视图只接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给控制和模型。
  
  模型(Model):就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。目前流行的EJB模型就是一个典型的应用例子,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但它不能作为应用设计模型的框架。它仅仅告诉你按这种模型设计就可以利用某些技术组件,从而减少了技术上的困难。对一个开发者来说,就可以专注于业务模型的设计。MVC设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要,这也是判断开发人员是否优秀的设计依据。抽象与具体不能隔得太远,也不能太近。MVC并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。我们可以用对象编程来做比喻,MVC定义了一个顶级类,告诉它的子类你只能做这些,但没法限制你能做这些。这点对编程的开发人员非常重要。
  
  业务模型还有一个很重要的模型那就是数据模型。数据模型主要指实体对象的数据保存(持续化)。比如将一张订单保存到数据库,从数据库获取订单。我们可以将这个模型单独列出,所有有关数据库的操作只限制在该模型中。
  

  控制(Controller)可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层并不做任何的数据处理。例如,用户点击一个连接,控制层接受请求后, 并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给用户。因此,一个模型可能对应多个视图,一个视图可能对应多个模型。

MVC模型看设计


我们知道MVC模型中ModelViewController之间的关系如下:
MVC设计模式 _ JavaClub全栈架构师技术笔记

如图所示,在这个对象创建时要做的就是创建各个内部对象,然后注册各个对象之间的关系,这种关系由他们之间的交互来决定,并且决定了在接受到用户输入时他们之间交互的复杂性与有效性。

那么我们再看一下我们不用MVC模型,我们会如何处理上面三个对象之间的关系,如下图:

MVC设计模式 _ JavaClub全栈架构师技术笔记

对比上面两种关系图,我们发现 MVC 模型的对象之间的交互关系更简单一些,因为 MVC 中对象之间的交互是线性的每个对象只有一个输入一个输出,而下面图中的对象之间的关系是星形的,虽然除中心以外的对象的交互更加简单了,但位于中心的对象的交互任务就十分繁重了,作为本身具有实际工作的对象,如果在给其增加额外的负担,这会增加这个对象的复杂度,使其难以维护。所以综合起来 MVC 模型是简化了对象之间交互的复杂度,使得他们之间的交互更易控制。

所以有上面的分析对比可以知道,设计的两大原则:一:对象的抽象简化;二:对象之间关系的抽象简化。关于对象的抽象简化是做好设计的基础,对象抽象的好,组织的好,更容易简化对象之间的关系。那么设计一般先要分析抽象出最直接的对象,然后为了提高重用性,再细分出最基本的对象,然后在对基本的对象进行封装,简化对象的易用性,并且形成清晰的对象层次结构,到此静态的对象已经建立,接下来就是处理对象之间的关系,这一步对于对象的层次结构是有一定依赖的,对象之间的关系,

以线性关系最为简单,所以最好能够把对象之间的关系组织成线性的,但是不是所有情况都可以做到,但一般的原则,具体有自己功能的对象不该过多加入处理对象关系的功能,所以这种对象应该尽量放到线性关系中,而应该把对象之间的关系的处理再抽象出一个新的对象来专门负责,让每个参与交互的对象只直接和这个对象交互,这样每个具体的对象都是功能单一,交互单一,而这个新的对象他的职责就是负责交互,所以他也是功能单一。其实这就是星形的交互关系。这也说明星形的未必不如线性的。

只是不同的场合要用不同的模型,目的只有相同的一个-降低复杂度,增加灵活性。

所以有上面可以看出设计的目的就是用最简单的,最灵活的方法实现最强大的功能。

简单就是容易维护,容易实现;灵活就是容易应付不同的需求;强大的功能就是不限制未来一些新的需求的实现即可扩展性。

总结,设计的关键在于对象的处理,对象之间关系的处理,并且二者之间是相互影响的,在设计需要通盘考虑,而设计的目的则在于降低复杂度,增加灵活性。


作者:Neo_Wu
来源链接:https://blog.csdn.net/Andeewu/article/details/7934907

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/42549.html

标签: 设计模式
分享给朋友:

“MVC设计模式” 的相关文章

炒冷饭系列:设计模式 工厂方法模式

炒冷饭系列:设计模式 工厂方法模式

炒冷饭系列:设计模式 工厂方法模式 摘要: 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 事虽险,吾善为;苟擅为,子道亏。物虽小,勿私藏;苟...

炒冷饭系列:设计模式 抽象工厂模式

炒冷饭系列:设计模式 抽象工厂模式

炒冷饭系列:设计模式 抽象工厂模式 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 亲爱我,孝何难;亲恶我,孝方贤。 一、什么是抽象...

炒冷饭系列:设计模式 工厂模式

炒冷饭系列:设计模式 工厂模式

炒冷饭系列:设计模式 工厂模式 摘要: 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 事虽险,吾善为;苟擅为,子道亏。物虽小,勿私藏;苟私藏...

SpringMVC的设计模式是什么?

SpringMVC的设计模式是什么?

SpringMVC设计模式是一种通用的软件编程思想。 在SpringMVC设计模式中认为, 任何软件都可以分为三部分组成: 1.控制程序流转的控制器(Controller) 2.封装数据处理数据的模型(Model) 3.负责展示数据的视图(view)...

零基础学习设计模式之装饰器模式(配套视频)

零基础学习设计模式之装饰器模式(配套视频)

零基础学习设计模式之装饰器模式 定义 在不改变目标结构的情况下,动态的给对象增加功能 举例 如房子装修、相片加相框等,都是装饰器模式。 基本组件 抽象构件(Compo...

Java 高并发第二阶段实战---高并发设计模式,内存模型,CPU一致性协议,volatile关键字剖析

     第二阶段的课程主要围绕着Volatile关键字,内存重排序,Happen-Before,Cpu一致性协议,高并发下的设计模式以及类加载器几个大的方面展开,下面是内容详细信息,本教程是本人录制,下载地址为 高并发设计模式 汪文...

2021Java高级面试题!java设计模式场景

2021Java高级面试题!java设计模式场景

一、掀起Spring的盖头来 Spring框架的由来 Spring框架概述 二、Spring的IoC容器 重头开始认识loC的基本概念:(构造方法注入+scttcr方法注入+接口注入) 运筹帷幄的秘密...

单例设计模式线程安全问题

单例设计模式线程安全问题 懒汉式 class Lazy { private Lazy(){ System.out.println("test Lazy"); } private static Lazy lazy=null;...

java设计模式--单例模式

单例模式 单例模式在Java设计模式中属于非常重要的一种模式,意在保证一个类只有唯一一个实例,并且向整个系统提供一个访问它的全局访问点。   单例模式的特点 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。...

设计模式(C++实现)专题 -- 2.3.3 命令模式

命令模式 作者:尼奥普兰 来源链接:https://blog.csdn.net/u011889952/article/details/96307601...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。