从“框架”说起
最早听说“框架”这个名词应该是建筑行业中的一个术语吧。修建一个具有一定规模的房屋,需要先通过钢精、水泥搭建起一个坚固的轮廓,此谓之“框架”,然后就可以在不影响主体结构的情况下往里面添砖添瓦。也不知道什么时候框架这词被引入到了软件开发中来,特别是近几年,到处都充斥着“框架”这个概念,什么都给挂个框架的名号上去,其中不乏某些所谓的“概念高手”们,为了让自己开发出来的东西听起来比较霸气,而张冠李戴,鱼目混珠。
的确,在软件行业中谈论框架是一个比较大的话题,从软件管理、软件工程、各种方法论以及具体针对开发平台的开发工作中都涉及到了“框架”这样一个概念。由于工作关系,我涉及到最多的应该是针对具体平台的开发这一块,讲的具体点,就是针对.net平台的开发。鉴于鄙人知识的摄取有限,且掌握程度一般,但从个人理解对其做如下定义:框架,就是将一个应用领域的公共的,稳定的部分抽取出来,搭建的一个可扩展的、可重用的体系结构。
下面我想通过一些例子来说明一下我的看法。
毋庸置疑,.Net Framwork是所有基于.net开发的基础框架,它为我们提供了大量工具和无数可重用的类(当然,我使用无数来修饰并不是简单的表示其多,而是我认为,.net发展到今天应该很难能找出一个使用过所有的.Net类的人)。我们可以非常轻松地象小孩子搭积木一样的搭建一个应用。当然,如果其仅仅是给我们提供了无数的小的积木,我认为是没有资格称之为框架的。更重要的是这些积木能给我门提供了非常多的扩展空间,让我们能简单且非常灵活的定置自己的应用程序。
如果你正在从事企业开发,那么你一定不会错过.net的远程访问框架-----dotnet Remoting。(微软花了大笔的银子在宣传web Service上面,而对手上的这个如此优秀的技术却宣传甚少,实在让人不解),dotnet Remoting为我们做了太多的事情,我门几乎只用几行代码就可以完成跨进程、跨机器的远程访问,在企业开发中往往需要的是更复杂的定制,比如远程通讯加密、远程访问权限控制、负载均衡等功能,这些通过继承Remoting框架中的RealProxy或是插入通道接收器就可以扩展。通过配置使用不同的通道和格式化器,既可以实现外网防火墙友好的通讯,也可以实现高效的内网通讯。
开源世界中也存在着非常多的框架范例,如:Log4Net(日志框架)、Nhibernate(O\R Mapping框架)、IBatisnet DataAccess(数据访问框架)、还有日常开发中用的最多的单元测试框架NUnit等,他们都提供了一系列的基础设施,同时也允许我们进行扩展。Log4Net允许我们定制不同的日志记录方式和存储方式;NHibernate允许我们灵活地进行关系型的数据表和面向对象的实体之间的映射;IBatisnet DataAccess支持我们定制和扩展不同的低层持久化方式,而对外使用一致的数据访问接口;Nunit的灵活性我想就不用多说了(用了都说好!)
上面谈论的框架也许是比较高级的运用,我门再来看看低级一点的,就说Win32平台吧。其实不管什么开发平台,凡是基于Win32的,其实都是使用Win32的API在做事,这些API其实就是操作系统专为应用开发提供的积木,只是直接使用它不太友好罢了。所有基于Win32的系统都是按照指定的方式启动和消亡,也就是说这样的应用程序的生命周期是有一个框架的,即使该应用在启动或消亡的时候做了一些额外的花哨的动作(这些动作其实就是我们对Win32应用程序框架的扩充),本质是不变的。
很明显,所有的通过比较正式的方式公布出来的框架都是提供了一定的基础设施,通过这些基础设施能搭建某一领域的应用轮廓,并且在利用这些基础设施的同时能很方便得扩充进自己的想法。所以,请以后不要拿着一堆没有扩展性的积木来对我说,“瞧,这是我的框架”。


浙公网安备 33010602011771号