-
什么是框架
框架(
F
ramework
)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间
交互的方
法
;
另一种定义认为,框架是
可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方
面给出的定义。<
/p>
可以说,一个框架是一个可复用的设计构件,它规定了应用的体
系结构,阐明了整个设计、协作构件
之间的依赖关系、责任分配和控制流程,表现为一组
抽象类以及其实例之间协作的方法,它为构件复
用提供了上下文
(Context)
关系。因此构件库的大规模重用也需要框架。
构件领域框架方法在很大程度上借鉴了硬件技术发展的成就,
它是构件技术、
软件体系结构研究和应
用软件开发三者发展结
合的产物。在很多情况下,框架通常以构件库的形式出现,但构件库只是框架
的一个重要
部分。框架的关键还在于框架内对象间的交互模式和控制流模式。
框架比构件可定制性强。在某种程度上,将构件和框架看成两个不同但彼此协作的技术或许更好。框
架为构件提供重用的环境,为构件处理错误、交换数据及激活操作提供了标准的方法。
应用框架的概念也很简单。
它并不是包含构件应
用程序的小片程序,
而是实现了某应用领域通用完备
功能(除去
特殊应用的部分)的底层服务。使用这种框架的编程人员可以在一个通用功能已经实现的
基础上开始具体的系统开发。
框架提供了所有应用期望的默认行为的类集合。
具体的应用通过重写子
类
(
该子类属于框架的默认行为
)
或组装对象来支持应用专用的行
为。
应用框架强调的是软件的设计重用性和系统的可扩充性<
/p>
,
以缩短大型应用软件系统的开发周期,提高
开发质量。
与传统的基于类库的面向对象重用技术比较,
应
用框架更注重于面向专业领域的软件重用。
应用框架具有领域相关性,构件根据框架进行
复合而生成可运行的系统。框架的粒度越大,其中包含
的领域知识就更加完整。
框架,即
framework
。其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。
简
单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。框架的
概念最早起源于
Smalltalk
环境,其中最著名
的框架是
Smalltalk80
的用户界面框架
MVC(Model-View-Controller)
。
随着用户界面框架
Interviews
【
Linton89
】
和
E
T++
【
Weinand 89
】
p>
的开发和发布,框架研究越来越受到研究人员的重视。
虽然框架研究最初起源于用户界面领域,但它还被成功地应用到其他领域中,如操作系统、火警系统
等。
Taligent
公司于
1992
年成立后,框架研究受到了广泛的重视。该公司计划基于框架来
开发一个
完整的面向对象操作系统。另外,该公司还发布了一套支持快速应用开发的工具
集
CommonPoint
,
其中包括
了上百个面向对象框架【
Andert 94,Cotter 95
】。框架还没有统一的定义,其中
RalphJohnson
所给出的定义基本上为大多数研究人员所接受:
一个框架是
一个可复用设计,它是由一组抽象类及其实例间协作关系来表达的。
< br>这个定义是从框架内涵的角度来定义框架的,当然也可以从框架用途的角度来给出框架的定义:
< p>
一个框架是在一个给定的问题领域内,一个应用程序的一部分设计与实现
。
从以上两个定义可以看出,
框架是
对特定应用领域中的应用系统的部分设计和实现的整体结构。
框架
将应用系统划分为类和对象,定义类和对象的责任,类和对象如何互相协作,以及对象之间的控制线
程。这些共有的设计因素由框架预先定义,应用开发人员只须关注于特定的应用系统特有部分。框架
刻画了其应用领域所共有的设计决策,
所以说框架着重于设计复
用,
尽管框架中可能包含用某种程序
设计语言实现的具体类。<
/p>
一个基于框架开发的应用系统包含一个或多个框架,
与框架相关的构件类,
以及与应用系统相关的功
能
扩展。
与应用系统相关的扩展包括与应用系统相关的类和对象。
应用系统可能仅仅复用了面向对象
框架的一部分,或者说,它可能需要对框架进行一些适
应性修改,以满足系统需求。
面向对象的框架作为一种可复用
的软件,
在基于框架的软件开发过程中会涉及到框架的开发和利用两
个方面的工作。
框架的开发阶段在于产生领域中可复用的设计。
该阶段的主要结果是框架以及与框架
相关的构件类。该阶段的一个重要活动是框架的
演变和维护。像所有软件一样,框架也易于变化。产
生变化的原因很多,如应用出错,业
务领域变化,等等。
不论是哪一种技术,最终都是为业务发展
而服务的。从业务的角度来讲。首先,框架的是为了企业的
业务发展和战略规划而服务的
,他服从于企业的愿景;其次,框架最重要的目标是提高企业的竞争能
力,包括降低成本
、提高质量、改善客户满意程度,控制进度等方面。最后,框架实现这一目标的方
式是进
行有效的知识积累。软件开发是一种知识活动,因此知识的聚集和积累是至关重要的。框架能
够采用一种结构化的方式对某个特定的业务领域进行描述,
也就是将这个领域相关的
技术以代码、
文
档、模型等方式固化下来。
以上是框架的广义概念。接下来说说前端框架。
前端框架
前端框架也是框架,是框架
更具体的分类,是提供一套解决方案,你得按我的规定来安排代码结构,
它是随着前端功
能的增强而产生的,对于往应用方向发展(也就是越来越像客户端)的
web
产品就
很必要做前端架构这件事,它开始以模型为中心,
< br>DOM
操作只是附加,通过关注点分离鼓励改进应
用程序
。
未来的发展趋势是前后端只靠
js
on
数据进行通信,
后端只处理和发送一段
json
到前端,
计算和模板
渲染
都在前端进行,后台程序不再做模板的任何处理。使用
MV*
框
架能有效实现前后端的解耦,简
化开发流程,便于维护管理,可以把精力更多放到业务逻
辑,提升开发效率。
所以考虑是否需要引入前端框架,
可以根据产品类型做个基本判断:
对于页面型产品,
< br>处理交互更多,
jquery
也够用;但如果是应用软件
类产品,需要关注处理复杂模型,很有必要引入
MV*
框架。如
今
的互联网公司的产品基本都是
webapp
< br>,
越来越像传统应用软件开发靠拢,
使用个框架就还是很
有必
要的。
前端框架的特点:
1.
声明式
&
数据驱动渲染
更深一步思考,
React
提供的
JSX
和
Vue
提供的模板,它们的目的是什么?目的是为了实现
声明式
渲染的功能。不论是
JSX
,或
者是
Vue
中的模板,本质上都是描述了『状态』与『视图』之
间的映
射关系。
所以声明式渲染是框架的特性。
声明了映射关系之后,可以得到一个公式:
UI =render(state)
状态与视图之间的映射
关系,
等同于
render
函数。
p>
熟悉
React
的同学对这个公式应该并不
陌生。
JSX
与
Vue
的模板在这一点上是相同的。在框架的内部,不论是
JSX
还是
Vue
的模板,最终会编译成
render
函数。
上面这个公式,
输入的是
state
,输出的是
DOM
。所以输入变了输出就变了。
这个特性就是我们常说的数据驱动视图。
这里会引出一个问题,框架必须要知道
Web
应用在运行时
”状态“是否发生了变化,然后才能使用
前面提到的公式重新输出一个新的
UI
。
所以如何知道
Web
应用的状态在运行时是否发生了变化这个
问题是所有框架必须去
解决的。
解决方案有很多种。不同框架,或者同一个框架的不
同版本对这个问题的解决方案都不同,但相同的
是都可以解决问题。关于这个问题如何解
决,我在曾在我的文章、分享的
PPT
以及目前还未上市的
p>
书中都有详细的介绍。这个问题不是本文所讨论的重点,感兴趣的同学可以点击这里了解更多
信息。
不同的解决方案,导致的直接结果就是它所提供给用户
的上层语法或
API
完全不一样。
2.
组件化
现代主流框架都具备的一个特性是“组件”,它们都会以“组件”作为一个基本的抽象单元。
< br>
可能不同的框架,它所提供的操控组件的方式不一样,但概念上是相似的。
p>
之前听过一次尤雨溪的知乎
Live
p>
,
他将实际应用中的组件分为四种类型并依次介绍了四种组件之间的
区别:
?
展示型组件
展示型组件是最直接也是
最常用的组件,就是用数据渲染视图,“数据进,
DOM
出”。
?
接入型组件
接入型组件通常会跟接入
数据的
service
层打交道。包含一些和服务器或数据源打
交道的逻辑,然后
接入型组件会将数据往下传,
传给比较简单的
展示型组件。
在
React
中这种类型
的组件被称为
“容器
组件(
conta
inercomponent
)”。
?
交互型组件
交互型组件典型的例子是
对表单组件的封装和增强。大部分组件库,像
ElementUI
都是以交互型组
件为主。这一类组件会有比较复杂的交互逻辑,但是它是一个非常通用
的逻辑,所以它强调复用。
?
功能型组件
功能型组件是比较抽象的
组件。用
Vue
举例,路由的
和
Vue
自带的<
/p>
都
属于功能型
组件。它本身不渲染任何内容,它是一个逻辑型的组件。它通常作为一个扩展或一种抽象
机制存在。
不同框架操控组件的方式可能不一样,但使用组件
的“心法”永远是一样的。这就是关注特性带来的
好处,你可以切换到任意一个框架,使
用组件或封装组件时,总是上面列出的几种类型。
掌握了“心
法”的程序员在切换框架时,他的状态通常是这样的:我现在想写一个交互型组件,这个
框架都提供了哪些
API
?去翻翻文档看一下。然后就可以写出
一个很优雅的组件出来,哪怕刚使用这
个框架才不到一天。
<
/p>
如果没有掌握
“心法”
,
用了一个框架写出的代码很糟糕,
那么换了一个框架也不会写出更好的代码,<
/p>
甚至更糟糕。。
3.
路由
在
前端框架中都是前端路由,
可以保证性能和用户体验的层面来比较的话,
后端路由每次访问一个新
页面的时候都要向服务器发送请求,然后服务器再响应
请求,这个过程肯定会有延迟。而前端路由在
访问一个新页面的时候仅仅是变换了一下路
径而已,
没有了网络延迟,
对于用户体验来说会有相当大
的提升。
在某些场合中,用
ajax
请求,可以让页面无刷新,页面变了但
Url
没有变化,用户就不能复制到想
要的地址,用前端路由做单页面
网页就很好的解决了这个问题。
4.
良好周边以及社区
一个框架的成长必然离不开别人的辅助升级。不断吸收新的想法使得框架走的会越来越好。
5.
其他特点
前面详细介绍了几个个特性给大家感受下为什么要重视特性。
框架的特
性太多,
而且不同的框架都会
有不同的特性,不能每一个都详细
介绍,下面列出一些大家比较熟悉的通用特性:
状态和数据流管理
CLI
工具
同构
/
服务端渲染
CSS
管理方案
前端框架对比
框架的使用情况
< br>这个是
2018
年
github
中各大前端框架的
Star
数量,
p>
Vue
是最受欢迎的明星项目。
-
-
-
-
-
-
-
-
-
上一篇:观看《我和我的家乡》电影观后感心得体会
下一篇:45套语文答案