「框架」一词在编程术语中使用的频繁程度 排前五,框架的数量也成百上千倍于编程语言,任何一门编程语言都会搭配上一定数据的框架用以提升开发软件产品的效率。随便举几个例子
JavaScript:jquery、angular、seajs、vue……
Java:spring、struts、hibernate、junit……
C#:asp.net、wpf、winform、asp.netmvc……
python:django、diesel、dpark、webpy……
php:ci、yii、zend、laravel……
从宏观的层面来看,软件是成品,编程语言是制作软件的工具,而框架就是软件的雏形,是软件的一个抽像的形态,这一点不难理解,相信程序员也都是了解的。
然而从微观的角度来做细致的观察,将框架这一概念从里到外理解透彻就没那么容易了。
先把框架的概念定义的一下:在程序设计中,框架是构成一类特定软件可复用设计的一组相互协作的类。
这一概念的定义出自软件开发行业一本 的书籍《设计模式》。粗略一看会觉得这个定义极度抽像,难以理解,很难根据描述在脑子中形成具体的概念。其实我们可以把这个定义拆分为三个部份来逐个分析
构成某一类特定的软件
一组可复用的类
这组类是相互协作的
只要是满足这三点的程序代码就可以被称之为框架。事实上只要满足前面二点,第三点也就无条件满足了,一组可复用的类不相互协作的可能性几乎为零,换句话说只要满足前面二点就肯定是一个框架了。我们来挑几个前面列出的框架的例子来进行具体的分析,以达到更清晰的表述框架概念的目的。
asp.net
微软家开发网站的技术,使用的语言C#(可替换成.net平台下的任何一种语言)。首先,这种技术是否是用来开发某一类特定的软件的?显然,这个条件是满足的,它就是用来开发网站的,网站当然是某一类特定的软件。asp.net中有可重复使用的类吗?这个条件也是满足的,system.web命名空间下的类基本都是为asp.net准备的。因此,asp.net符合框架的定义,它是一个使用C#语言来开发网站的框架。
spring
用来开发Java网站的一组类库。先说第二个条件,它是一组可复用的类吗?这是废话,前面 句话就说了spring就是一组类库。那么它是用来开发某一类特定的软件的吗?也是,spring就是用来开发Java网站的。两个条件都满足,spring就是一个框架,一个用来开发Java网站的框架。但是,请等等…spring的确是基于Java,然而,更确切的说它应该是基于servlet的,servlet才是基于Java的,而servlet也是一组可复用的Java类,并且是用来开发Java网站的。因此,可以说servlet才是基于Java的用来开发网站的框架,而spring是在servlet的基础上进行的封装,因此,更精确的说法是它是用来开发servlet的网站的框架。甚至我个人觉得,spring就是用来开发Java网站的一组类库,是对servlet的封装,根本算不上一个框架,因为开发Java网站的框架从来都只是servlet。你可以说它是用来开发servlet网站的,是用来开发spring网站的,但是事实上它们都是Java网站,而Java网站就是用servlet框架开发的,因此spring只能算是一组用来方便解决问题的类库。
hibernate
第二个条件满足,它Java中用来实现数据库操纵和对象关系映射的一系列类,而且可以复用。那它是用来开发某一类特定的软件的吗?是hibernate应用程序?看似合理但好像也站不住脚,这算是什么程序;关系对象映射应用程序?也没听过;基于Java的数据库管理程序?咦!这个好像听说过,但是关hibernate什么事,这是jdbc的事情呀。因此,个人认为hibernate不能算是一个框架,它只是一组方便解决问题的类。
jQuery
它是一组可复用的类库吗?算它是吧,JavaScript不是纯面向对象的语言,但看在jquery流行的份上,我们就当它的设计思路是正确的,至于是不是面向对象,其实并不要。而且最重要的是jquery是可以复用的。但它是用来开发某类特定的软件的吗?JavaScript ?用JavaScript自己就可以了。jquery程序?jquery ?好像没有这个说法呀!那jquery倒底是不是框架呢?网上普遍认为是,但我却是持否定的态度的,至少我找不到在哪一个层面可将之视为框架理由。给我的感觉,jquery就是用来增加开发效率的一组用JavaScript编写的功能而以,并不是框架。jquery就是js,两者并不用区分的很清楚。
以上这些只是我个的理解。框架是一个很抽像并且边界很难界定的概念,不同的人都会有不同的理解。我们自己也可以开发框架,比如说用来解决某些常见且工作经常重复的问题,如网站后台管理系统,都是一系列增删查改的操作,因此可以以解决这个需求为目标开发一套通用的系统,适用与所有的网站后台管理系统,而且也只适用于网站后台管理系统,我们可以把它称之为「xxx网站管理系统框架」。
脱离软件开发领域,我们可以将框架这一概念泛化,比如我们可以说框架是「做某类特定事情的流程和资源」。比如说肯德基的生产,在某一地区,肯德基的原料提供、制作流程、调料配置、食物味道在任何门店都是一样的,因为肯德基就有这么一套生产食品的模式,换种说法就是框架,只要按照这个框架的定义来制作,就能让顾客吃出肯德基石的味道。再举个别的例子,如房地产开发商开发楼盘,拍地、销售、建造、交房、物业管理…从开始到结束不也是一套框架吗?以这样一种模式去实践就能开发出一个能住人的楼盘来。
因此,框架并不是在软件开发中独有的,甚至除人类以外的任何生物都可以有自己的框架,它是一种用来解决特定问题的方法。
赞赏