概念:

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

最典型的MVC就是Jsp + Servlet + JavaBean的模式

MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。更好的调节M和V的搭配。

MVC是一种框架模式,说到底是一种框架,而不是一种设计模式,框架通常是代码重用,而设计模式是设计重用,而架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。

视图view:

  视图是用户看到并与之交互的界面,可以被浏览器解释成用户界面的一切语言,最常见的就是html。

模型model:

      在MVC的三个部件中,模型拥有最多的处理任务。例如来对数据库的操作,被模型返回的数据是中立的,就是说模型与数据将要显示的格式无关,这样一个模型能为多个视图提供数据,也就是说数据在显示的时候有多种显示模式,例如css可以给同样的数据多种显示模式,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

控制器controler:

  控制器接受用户的输入并调用模型和视图去完成用户的需求,所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。更好的调节M和V的搭配。C层可以做的事情在M或者V层中都可以做。只是为了更好的分层。

---------------------------------------------------------------------------------------------------------------

  在MVC里,View是可以直接访问Model的,例如在jsp页面上,可以嵌套Java代码,这样在View上就可以越过Controller访问Model了,从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑。 在MVC模型里,更关注的Model的不变,而同时有多个对Model的不同显示,即View。所以,在MVC模型里,Model不依赖于View,【因为MVC的核心是Model】但是View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的,因为这部分不是公用的Model了,其他View不能使用这个View里面的代码。

而在MVC中View会从直接Model中读取数据而不是通过 Controller。这也是MVC和MVP的最主要的区别。所以MVC中模型与视图并没有完全分离。而且控制层和表现层有时会过于紧密,导致没有真正分离和重用。

优点:MVC 式的出现不仅实现了功能模块和显示模块的分离,同时它还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性

1:耦合性低

  视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,[例如,改写jsp,html,css,javascirpt的代码,并不需要重启服务器]同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可【例如,换表名查询,更改一些查询的条件,或者使用动态sql还是静态的sql,只用更改model即可】。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。

2:重用性高

  随着技术的不断进步,需要用越来越多的方式来访问应用程序。MVC模式允许使用各种不同样式的视图来访问同一个服务器端的代码,因为多个视图能共享一个模型,它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面使用。【例如,模型层实现了同样的分页,不同的视图层可以用一万种不同的显示方法,例如百度搜索下面的分页和谷歌搜索下面的分页】MVC使开发和维护用户接口的技术含量降低。

3:部署快

  使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。【例如,前端后端可以分工作业,效率高,方便多开发人员间的分工】

4:可维护性高

  分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。【例如:如果想改业务逻辑,只用改业务逻辑,如果想改视图,只用改视图,如果想增加功能,只需要增加即可,分层最大的好处就是容易后期维护降低维护成本,和增加新的功能,提高代码重用性,从而提高开发效率】

5:有利软件工程化管理

  由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。控制器也提供了一个好处,就是可以使用控制器来联接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择模型进行处理,然后选择视图将处理结果显示给用户。【因为控制器重点在于分配,更好的结合视图和模型】

缺点:

1:没有明确的定义

  完全理解MVC并不是很容易。使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。同时由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难。每个构件在使用之前都需要经过彻底的测试。

2:不适合小型,中等规模的应用程序

  花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。【这个是最明显的缺点,例如我们仅仅需要到数据库查信息,如果不分层设计我们可以直接从视图型层到模型去访问,效率上会有所提高,如果以代码的复杂性为代价,多了一层,代码量大大增加,在这个时候就降低了开发效率】

3:增加系统结构和实现的复杂性

  对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。

4:视图与控制器间的过于紧密的连接

  视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。【例如,不可能总是在jsp页面中直接访问模型,一般放在逻辑控制层进行处理,servlet】

5:视图对模型数据的低效率访问

  依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。【例如,页面的有一部分数据我并没有更新,但是提交到模型层照样会去获得返回显示 】

6:一般高级的界面工具或构造器不支持模式

  改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,会造成MVC使用的困难。

总结:

  优点:分层,结构清晰,耦合性低,大型项目代码的复用性得到极大的提高,开发人员分工明确,提高了开发的效率,维护方便,降低了维护成本。

  缺点:简单的小型项目,使用MVC设计反而会降低开发效率,层和层虽然相互分离,但是之间关联性太强,没有做到独立的重用。

MVC的理解和优缺点的总结相关推荐

  1. mvc模式缺点 php,mvc模式有哪些优缺点

    MVC模式的优点有:分工明确,重用性高而且模型具备可移植性,可以允许更换视图和控制器对象:缺点是没有明确的定义,降低了系统的性能以及增加了代码工作量 MVC可以看作是一个架构或者说是一个设计模式,它就 ...

  2. [MVC] 常用MVC框架及之间优缺点

    目录 常用MVC框架及之间优缺点 Spring与Spring MVC的区别 Spring与Struts2的区别 Spring MVC和Struts2的区别 Spring MVC和jFinal的区别 R ...

  3. Vue.js的的理解及优缺点

    一.MVX框架模式了解 MVX框架模式:MVC+MVP+MVVM 1.MVC:Model(模型)+View(视图)+controller(控制器),主要是基于分层的目的,让彼此的职责分开.       ...

  4. 谈谈对MVC的理解(View+Model+Controller)

    1) 什么是MVC? MVC是一种设计思想,根据职责不同将程序中的组件分成以下3个部分. V(View视图):负责与用户交互.将数据展现,或者是接收数据 M(Model模型):负责业务处理.业务模型, ...

  5. [翻译:ASP.NET MVC 教程]理解模型、视图和控制器

    本篇教程为你提供了ASP.NET MVC的模型.视图和控制器的高级概述.换句话说,即本文向你解释了在ASP.NET MVC中"M"."V"和"C&qu ...

  6. Java中MVC详解以及优缺点总结

    概念:  MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务数据.逻辑.界面显示分离的方 ...

  7. 一、node.js的理解?优缺点?应用场景?

    一.是什么 node.js是一个开源与跨平台的JavaScript运行时环境 在浏览器外运行 V8 JavaScript 引擎(Google Chrome 的内核),利用事件驱动.非阻塞和异步输入输出 ...

  8. Spring常用注解,注解 IOC ,AOP,MVC 的理解

    文章目录 大佬总结 0.Spring常用注解 0.1.SpringBootController里面的用法 0.1.1.SpringBoot 中常用注解@Controller/@RestControll ...

  9. 通过手写Spring MVC来理解其原理

    Spring MVC简单说,是Spring生态圈里的一个优秀的MVC框架,也可以认为是一个增强型的servlet(核心是DispatcherServlet,配置在web.xml中). Spring M ...

最新文章

  1. opencv-python图像处理之轮廓算法
  2. java最最长的错误,Java开发中遇到最多的异常是什么?最后一个最多最难!
  3. MongoDB入门及 c# .netcore客户端MongoDB.Driver2.9.1使用
  4. c语言实现文件数据删除视频,如何用c语言实现删除文件中指定的数据;例如
  5. Java 对象占用内存大小
  6. 【小实验讲解】贝叶斯拼写检查器
  7. FreeSql (二十八)事务
  8. C语言base64编解码
  9. C++面向对象思想 两条直线交点计算
  10. python语言运算符有三种_《Python语言程序设计》 —2.3 运算符
  11. java post 多文件报头_Spring MVC-------文件上传,单文件,多文件,文件下载
  12. 简述负载均衡CDN技术
  13. 收费系统java源代码_java网吧计费系统源代码
  14. 【教程】MFC到Delphi的皮肤移植
  15. Vue二次元个人博客模板
  16. stm8s定时器输出比较模式
  17. Tensorflow环境搭建
  18. 整理:X86架构图示以及各部分解释
  19. 现代版的———项链 :(  转
  20. 联想笔记本小新air14,键盘如何设置不用按Fn直接按F1~12、?

热门文章

  1. 微信公众平台开发的部分知识
  2. 昆泰CH7511B方案设计|CH7511B设计EDP转LVDS资料|pin to pin 替代CH7511B电路设计
  3. Elasticsearch - Indices stats 获取索引级别的统计信息之六 【segments】段的内存使用情况
  4. Oracle----综合实战:数据库设计分析实例
  5. 基于fis3的组件可视化道路
  6. Dofbot机械臂从零部署笔记(4)——ROS之Moveit下实现实机逆向运动学规划
  7. FreeRTOS学习---“信号量”篇
  8. Java 多人聊天室
  9. Linux系统编程—文件—write函数
  10. 读《淘宝数据魔方技术架构解析》有感