MVC(Model View Controller)

MVC是一种设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件上,在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间。

MVC开始时存在于桌面程序中的,M是指业务模型-V是指用户界面-C是指控制器。

页面中MVC的作用

在于将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式

V-view视图:是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于他能为应用程序处理很多不用的视图。在视图中其实没有真正的处理发生,它只是一个作为输出数据并允许用户操纵的方式。

M-model模型:是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用与模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

C-Controller控制器:是指控制器接收用户的输入并调用模型和视图去完成用户的需求,控制其本身不输出任何东西和任何处理。它只是接收请求并解决调用哪个模型构建去处理请求,然后再确认用哪个视图来显示返回的数据。

用户首先在界面中进行人机交互,然后请求发送到控制器,控制器根据请求类型和请求的指令发送到相应的模型,模型可以与数据库进行交互,进行增删改查操作,完成之后,根据业务的逻辑选择相应的视图进行显示,此时用户获得此次交互的反馈信息,用户可以进行下一步交互,如循环。

MVC优缺点

优点

① 耦合性低:视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图层相分离,所以很容易改变应用程序的数据层和业务层规则。

② 重用性高:MVC模式允许使用各种不用样式的视图来访问同一个服务器端的代码,因为多个视图能共享一个模型,它包括任何WEB(HTTP)浏览器或者无线浏览器(WAP),比如,用户可以通过电脑也可以通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构建能被不同的界面使用。

③ 部署快,生命周期成本低:MVC使开发和维护用户接口的技术含量降低。使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。

④ 可维护性高:分离视图层和业务逻辑层也使得WEB应用更容易与维护和修改。

缺点

① 调试困难:因为模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难,每个构件在使用之间都需要经过彻底的测试。

② 不适合小型,中等规模的应用程序:在一个中小型的程序中,强制性的使用MVC进行开发,往往会花费大量时间,并且不能体现MVC的优势,同时会使开发变得繁琐。

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

④ 视图与控制器间的过于紧密的连接并且降低了视图对模型数据的访问:视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就彻底妨碍了它们的独立重用。

依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能

最新文章

  1. Python多线程爬虫爬取电影天堂资源
  2. bootstrap中的Grid system详解
  3. mysql 单表排序,相同值排序
  4. STL set 用法
  5. Maven(二)使用eclipse创建maven多模块项目
  6. cx_Oracle 中文乱码问题解决
  7. Yii2 rules验证规则
  8. topcoder SRM 624 DIV2 CostOfDancing
  9. Javascript类型
  10. OpenStack Newton:集虚拟化,裸金属和容器部署的统一云平台(转载)
  11. 关于我们DOM的知识点
  12. json_encode charset
  13. 数字证书简介及Java编码实现
  14. C# Url编码 HtmlUrl编码
  15. ORACLE 中写入txt文本与从Txt文件中读入数据 修改表结构
  16. hdu_4651_Partition(公式)
  17. 探寻 JavaScript 精度问题
  18. Python初次安装使用教程
  19. HTML5实现微信聊天气泡效果
  20. [Object Tracking] How to learn Active contour model - Snake Model

热门文章

  1. iOS开发UIMotionEffect运动视觉效果
  2. Python 实现快速排序和随机快速排序
  3. Django之13种必会查询
  4. 初识OpenCV-Python - 008: 形态转换
  5. java笔试之简单密码
  6. 移植 TinyLogin
  7. 设置编辑工具UltraEdit的背景色为护眼颜色
  8. [转]成为Java顶尖程序员 ,看这11本书就够了
  9. ZOJ2562
  10. 关于str的打印格式