MVC框架我的浅析

一、概述:php

  相信很多前端从业者,都会遇到MVC编程模式,现今多数轻量级网站用php做为后台交互,MVC编程模式用于JAVAWEB开发,应用类型以系统占多数(包括并不限于系统,电商网站,平台交互固然都能实现),这里主要是我接触到的MVC是应用与系统的,有很大程度上的我的局限性,欢迎各位朋友交流指正。前端

二、简述:java

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

  • Model(模型)表示应用程序核心(好比数据库记录列表)。
  • View(视图)显示数据(数据库记录)。
  • Controller(控制器)处理输入(写入数据库记录)。
  MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的彻底控制。
 
  Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。一般模型对象负责在数据库中存取数据。
 
  View(视图)是应用程序中处理数据显示的部分。一般视图是依据模型数据建立的。  
 
  Controller(控制器)是应用程序中处理用户交互的部分。一般控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
 
  MVC 分层有助于管理复杂的应用程序,由于您能够在一个时间内专门关注一个方面。例如,您能够在不依赖业务逻辑的状况下专一于视图设计。同时也让应用程序的测试更加容易。
 
  MVC 分层同时也简化了分组开发。不一样的开发人员可同时开发视图、控制器逻辑和业务逻辑。
  
三、应用典型:
  这里介绍的是JSP + servlet + javabean模式。
  
  上面简述了MVC的组成,这里详细介绍一下JSP + servlet + javabean模式下的原理:
  一、jsp页面在view内,做为表现层,用于用户对系统的控制、交互的中介,同时也是后台输出数据的渠道。
  二、jsp页面内会有AJAX请求数据的方法,这里的AJAX请求路径就是前台jsp页面链接后台Controller层接口的路径。
  三、Controller层主要功能是接收JSP页面请求,完成页面跳转,同时提供了前台与后台的接口,若是你是一个前端开发者,正常状况下代码应该是写到Controller层为止的。
  四、Controller层接收到请求往下走,到对应的Service层,通常来讲Service层又分为两层,一个是xxxxService.java另外一个是xxxxServiceImpl.java,前者是controller与service层的接口,然后者(Impl)就是具体后台实现方法。
  五、service层对数据进行处理以后,进入Dao层,Dao层也分为两层,一个是xxxxDao.java另外一个是xxxxDaoImpl.java,与service层同理,前者是连接service与到层的接口,后者(Impl)是具体连接mapper文件的方法。
  六、xxxxxmapper.xml文件内写的是sql语句,用于访问数据库,从数据库中获取或者传入数据,实现对数据库的操做。
  七、model层内包含了数据库的get和set方法,在mapper文件中对数据库的操做,依赖于model层。
  八、通过上述流程,数据就会完成一次转化,就我我的而言并无对大数据处理的经验, 说下目前的我的理解:任何对数据的操做,分析,整理都能还原成增删改查四种操做。(若是咱们把业务流程拆分,还原成数据,那么一切操做都是基于数据实现的,数据才是一切的根本,那么咱们是否能够设计出一款基于数据的编程模式....)说多了,这里只是我一种设想,或者已经实现只是我孤陋寡闻。
 
  回到正题,下面是具体流程图:
  
  
四、框架和设计模式的区别:
  
  有不少程序员每每把框架模式和设计模式混淆,认为MVC是一种设计模式。实际上它们彻底是不一样的概念。
  框架、设计模式这两个概念总容易被混淆,其实它们之间仍是有区别的。框架一般是代码重用,而设计模式是设计重用,架构则介于二者之间,部分代码重用,部分设计重用,有时分析也可重用。在软件生产中有三种级别的重用:内部重用,即在同一应用中能公共使用的抽象块;代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;应用框架的重用,即为专用领域提供通用的或现成的基础结构,以得到最高级别的重用性。
框架与设计模式虽然类似,但却有着根本的不一样。设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;框架能够用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示;设计模式是比框架更小的元素,一个框架中每每含有一个或多个设计模式,框架老是针对某一特定应用领域,但同一模式却可适用于各类应用。能够说,框架是软件,而设计模式是软件的知识。
  框架模式有哪些?
  MVC、MTV、MVP、CBD、ORM等等;
 
  框架有哪些?
  C++语言的QT、MFC、gtk,Java语言的SSH 、SSI,php语言的 smarty(MVC模式),python语言的django(MTV模式)等等
 
  设计模式有哪些?
  工厂模式、适配器模式、策略模式等等
  简而言之:框架是大智慧,用来对软件设计进行分工;设计模式是小技巧,对具体问题提出解决方案,以提升代码复用率,下降耦合度。
五、MVC的特色:
  优势:
    一、耦合性低:
    视图层和业务层分离,这样就容许更改视图层代码而不用从新编译模型和控制器代码,一样,一个应用的业务流程或者业务规则的改变只须要改动MVC的模型层便可。由于模型与控制器和视图相分离,因此很容易改变应用程序的数据层和业务规则。
    模型是自包含的,而且与控制器和视图相分离,因此很容易改变应用程序的数据层和业务规则。若是把数据库从MySQL移植到Oracle,或者改变基于RDBMS数据源到LDAP,只需改变模型便可。一旦正确的实现了模型,无论数据来自数据库或是LDAP服务器,视图将会正确的显示它们。因为运用MVC的应用程序的三个部件是相互独立,改变其中一个不会影响其它两个,因此依据这种设计思想能构造良好的松耦合的构件。
 
    二、重用性高:
    MVC容许使用各类不一样样式的视图来访问同一个服务器端的代码,由于多个视图能共享一个模型,它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),好比,用户能够经过电脑也可经过手机来订购某样产品,虽然订购的方式不同,但处理订购产品的方式是同样的。因为模型返回的数据没有进行格式化,因此一样的构件能被不一样的界面使用。
 
    三、生命周期成本低:
    MVC使开发和维护用户接口的技术含量下降,MVC编程模式内部充斥着大量的实现接口,也就是说若是一个功能出错或须要改动,只要找到对应的接口进行修改即可。
 
    四、部署快:
    使用MVC模式使开发时间获得至关大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。
 
    五、可维护性高:
    分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。
 
    六、有利软件工程化管理
    因为不一样的层各司其职,每一层不一样的应用具备某些相同的特征,有利于经过工程化、工具化管理程序代码。控制器也提供了一个好处,就是可使用控制器来联接不一样的模型和视图去完成用户的需求,这样控制器能够为构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器能够根据用户的需求选择模型进行处理,而后选择视图将处理结果显示给用户。
 
  二、缺点:
    一、没有明确的定义
    想要彻底理解MVC编程是一件不容易的事。使用MVC须要精心的计划,因为它的内部原理比较复杂,因此须要花费一些时间去思考。同时因为模型和视图要严格的分离,这样也给调试应用程序带来了必定的困难。每一个构件在使用以前都须要通过完全的测试。
 
    二、不适合小型,中等规模的应用程序
    花费大量时间将MVC应用到规模并非很大的应用程序一般会得不偿失。
 
    三、增长系统结构和实现的复杂性
    对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增长结构的复杂性,并可能产生过多的更新操做,下降运行效率。
 
    四、视图与控制器间的过于紧密的链接
    视图与控制器是相互分离,但倒是联系紧密的部件,视图没有控制器的存在,其应用是颇有限的,反之亦然,这样就妨碍了他们的独立重用。
 
    五、视图对模型数据的低效率访问
    依据模型操做接口的不一样,视图可能须要屡次调用才能得到足够的显示数据。对未变化数据的没必要要的频繁访问,也将损害操做性能。
 
    六、通常高级的界面工具或构造器不支持模式
    改造这些工具以适应MVC须要和创建分离的部件的代价是很高的,会形成MVC使用的困难。