由于有关架构知识实在深奥,已经超出了我的修炼 level 。因此,在尊重原创的基础上,仅仅总结自己的一些感悟,以及对一些未知专业术语进行查阅并解释。
该篇介绍了滴滴在 GitHub 上开源的跨端解决方案 Chameleon ,简写 CML,中文名:卡梅龙,释意为变色龙,意味着就像变色龙一样能够适应不同环境的跨端整体解决方案,具有易用、开发快、高性能等特点。CML 专注于将一套代码在多个平台重复使用。
下图即是变色龙平台的支持平台:
其中涉及到的架构框架如下图:
其中开发模块中,涉及了视图层、逻辑层、组件、API组件等,这让我想到了老师曾经讲过的MVC模式,下面特地将MVC模式总结如下:
一、MVC概念:
全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
概念解释:
(1)Model(模型)表示应用程序核心,例如,数据库记录列表。
(2)View(视图)显示数据,例如:数据库记录。
(3)Controller(控制器)处理输入,例如:写入数据库记录。
视图和控制器共同构成了用户接口。并且每个视图都有一个相关的控制器组件。控制器接受输入,通常作为将鼠标移动、鼠标按钮的活动或键盘输入编码的时间。时间被翻译成模型或试图的服务器请求。用户仅仅通过控制器与系统交互。
二、MVC组成结构
模型组件包含应用程序的功能内核,他封装了相应的数据并输出执行特定应用程序处理的过程,模型也提供访问数据的函数,这些数据有获得待显示的数据的视图组件使用。
三、MVC设计理念
实现一种动态的程序设计,是后序对程序的修改和扩展简化,并且使程序某一部分的重复利用称为可能。
通过对复杂度的简化,使程序结构更加直观。
将信息的内部表示与信息的呈现方式分离开来,并接受用户的请求。它分离了组件,并允许有效的代码重用。即,将模型和视图的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保模型和视图的同步,一旦模型改变,视图应该同步更新。
四、MVC设计特点
重要特点就是两种分离:
视图和数据模型的分离:使用不同的视图对相同的数据进行展示;分离可视和不可视的组件,能够对模型进行独立测试。因为分离了可视组件减少了外部依赖利于测试。(数据库也是一种外部组件)
视图和表现逻辑(Controller)的分离:Controller是一个表现逻辑的组件,并非一个业务逻辑组件。MVC可以作为表现模式也可以作为建构模式,意味这Controller也可以是业务逻辑。分离逻辑和具体展示,能够对逻辑进行独立测试。
优点:耦合性低;重用性高;生命周期成本低;部署块;可维护性高;有利软件工程化管理。
缺点:没有明确的定义;不适合小型,中等规模的应用程序;增加系统结构和实现的复用性;视图与控制器间的过于紧密的连接;视图对模型数据的低效率访问;一般高级的界面工具或构造器不支持模式。
八、MVC应用实例
应用于基于MVC架构模式的框架,常见的服务器端MVC框架有:Struts、Spring MVC、ASP.NET MVC、Zend Framework、JSF;常见前端MVC框架:angularjs、reactjs、backbone;由MVC演化出了另外一些模式如:MVP、MVVM。
主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。他的两个核心是两个核心:
处理器映射:选择使用哪个控制器来处理请求
视图解析器:选择结果应该如何渲染
通过以上两点,Spring MVC保证了如何选择控制处理请求和如何选择视图展现输出之间的松耦合。
运行原理中涉及的名词解释如下:
请求:客户端请求提交到DispatcherServlet。
寻找处理器:由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller。
调用处理器:DispatcherServlet将请求提交到Controller。
调用业务处理和返回结果:Controller调用业务逻辑处理后,返回ModelAndView。
处理视图映射并返回模型: DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。
响应:视图负责将结果显示到客户端。
框架与MVC架构模式联系在于:SpringMVC中并没有涉及有关于Controller接口规范的实现,SpringMVC是通过调用Handler来实现Controller这一层的。
使用了适配器模式,前端控制器使用HandlerAdapter来调用不同的Controller,然后才是Controller调用Model产生数据模型;产生的数据模型将会再次返回到前端控制器,并由前端控制器决定使用不同的模板引擎将页面进行渲染。