来自金山词霸的解释:
n.1. 构架; 结构2. (体系的)结构,机制 3. (作为判断、决定等基础的)信仰,观点,准则
这是个非常形象的单词,用在程序设计领域非常的贴切。framework就是给定了一个基本的架构、流程,并指定细节实现的规范,单本身并不实现所有细节。程序员需要做的是按照规范填写这些流程里某些步骤的细节。
其实framework在计算机领域无所不在。下面按照从底向上的顺序展示给大家。
一、framework的类别
1. 硬件framework
这个framework就是著名的冯诺依曼架构,与之相对应的还有另外一种叫做哈佛的架构,不过并不流行。冯诺依曼规定了计算机的组成,但并没有指定CPU的型号和内存的大小。于是,硬件厂商就把不同的CPU和RAM填写到这个架构中,造就了各式各样的计算机,虽然这些计算机样子不同,但是工作流程都是不断的从RAM顺序读取指令并执行。
2.固件framework
这里的固件就是大家熟悉的BIOS了,BIOS尽管非常简单,但是却是一个标准的framework,它定义了计算机启动流程,规定了OS从哪里开始启动,这样OS制造商就必须在BIOS指定的位置填写代码。
3.操作系统framework
到此为止,算是真正进入了软件framework了,这也是个非常复杂的framework。规定了很多流程与规格,这里我们关心的是应用程序设计。拿Windows为例,它规定了执行文件启动流程,并通过PE格式说明,通过loader实现PE的架构分析。程序员做的就是填写应用逻辑的细节,而如何调用程序员写的代码,则由操作系统提供linker和loader完成。
4.编程语言的framework
先说C语言,C语言规定了程序入口为main()函数,其实这个main()函数只是C程序执行的一部分,其他的部分如程序员代码运行前、运行后的流程等由C语言编译器以及运行时共同完成。
对于C#以及Java等高级语言,其framework作用类似,也是负责与OS的loader对接,并调用程序员写的代码。
5.应用级别的framework
这个级别的framework很多,如java的structs, serverlet;C#的winform,webform, asp.net mvc等等,它们都是某一应用方向的framework,适用于某一流程。还有一些framework是通用的,如COM,Javabeans等,它们是软件组件化的框架,不关注业务层逻辑。
6.某一具体应用的framework
每个具有一定规模的软件产品,都有自己的framework,这也是大部分公司里软件架构师的工作吧。
二、framework与回调
framework是抽象的架构,必须是灵活的可扩展的,是经验丰富的设计人员负责设计的。因为framework本质上就是规定程序员填写的部分以及如何填写,已达到能被framework来调用其代码。调用级别可以是函数,这在C语言里就是回调函数,在C#里就是委托;调用级别还可以是多个函数组成的集合,这在C#和Java里可以通过接口实现,在C++里可以是抽象类,在C语言里可以是包含多个函数指针的结构体。
三、framework与库
为了便于使用者更方便地实现与框架的交互,framework一般都带有库,或者是函数库或者是类库共开发者使用。
四、个人开发者选择适合的framework
首先是framework的级别,为了快速开发最好选择最贴近业务流程的framework,如何没有合适的就选择再底层一点的框架,然后自己实现业务流程框架。
五、其他领域的framework
最典型的当然是建筑了,framework本身也是从建筑行业引申到别的行业的。再大点,整个社会本身就是一个framework,我们生活在这个框架中,要遵守整个框架的规则,按照其流程来活动,除非你能做制定新框架的人,否则就去遵守它吧!