Tangram
开源版本发布
经过一段难忘的忙碌,Tangram的第一个完整版本杀青了。回想来到北京的几年,可谓感慨万千,开发产品是心志的磨练,这话没错!经历身体与身心的煎熬,使我深刻的意识到勇者有畏,但也无畏。这一段难忘的经历更加坚定了我的信心。其实,用心去完成一个心愿是非常艰难的事情。计划中的Tangram分3个版本,分别是Open Source版、自由版(Free Edition)以及商业版,刚刚提交了开源版本,下载地址是:
https://sourceforge.net/projects/tangramproject;
http://www.codeplex.com/Tangram
国内下载地址:
http://www.webaddin.com
http://www.zdnet.com.cn/download/windows/swinfo/0,2008005031,39289318s,00.htm
自由版本的Tangram于下周内发布。
Tangram,从词义上解释就是来自中国的一个民间智力游戏:七巧板。其基本的出发点是用最简单的7种几何图形,组合出复杂的几何图案。这个简单的游戏,透视出古代中国人对复杂世界的朴素的认识。事实上,中国古代的先哲们很早就体现了对物质世界的基本认识,因此,也就有“金”、“木”、“水”、“火”、“土”等五行演绎世界的说法,此外,“太极生两仪、两仪生四象”等八卦论也体现了异曲同工之妙,这就是所谓的“五行八卦”。面对今天的软件世界,由于长时间的积累,比起10年前,今天可以说是一个多彩的世界,20世纪90年代中期,第一代互联网的崛起,使得人们充分领略了软件改变世界的魔力,特别是Java、COM、.NET、HTML等软件表现方式的成熟,使得今天的世界里人们越发感觉到,这些最初很神秘的东西,已经成为人们日常生活、工作里的一部分。从许多方面看,软件开发并不是什么高科技的因素,因此,寻求更有效的软件构造方式,一直是人们追求的目标。正像人们探索物质世界的奥秘所经历的那样,从分子论,到原子论,人们总结出了门捷列夫元素周期表,这一优秀的工作,使得人们从一个新的角度看到了物质世界的结构秩序,同时,也向人们展示了一个认识世界的基本方法,那就是,在复杂的现象面前,要对相互独立的对象进行“汇集”,以形成一个基本的“基”,在这个“基”的基础上,寻找相关现象的演绎规则。Tangram框架就是这样思考的产物,针对Windows平台上软件的开发,传统的COM技术、日渐普及的.NET技术,还有经典的C++技术一直都在自己的轨迹上发展着,都有各自忠实的拥护群体,毋庸置疑,每个领域都有各自的强项,因此,没有迹象表明谁会退出历史的舞台。Tangram的基本构思点是,允许开发者将以上三个方面进行一定意义上的自由组合:我们期待来自C++的CView对象、来自COM的ActiveX对象以及来自.NET的托管对象形成一个公共的软件“基”,允许开发者以一致的描述方式形成可描述的软件组合方案,这就是Tangram框架的基本出发点。
从软件开发的方式上考虑,Tangram的构想并不是要淘汰什么,其要点是企图简化构造软件的方式,我们看一个基本的软件框架:
如果我们立足于常规的C++开发方案,我们不难想象这个构架的开发过程,从一定程度上看,这个框架的开发并没有技术上的难度,但毫无疑问,肯定是非常繁琐的工作,从今天的角度看,大多数开发者还不能摆脱代码的局限来构造如此复杂的软件框架。
如同现代工业冲击手工作坊一样,新的思考方法一定会带来新的变化,这种变化使得人们相信,以今天的建筑工艺,盖起一座几十层的大厦,并不是一件很了不起的事情,也不是一个很了不起的工艺。同样,解决问题的关键不是代码的技术突破,而是描述方案的进步,经过仔细的观察,我们发现,如上图示的软件框架,是完全可以通过可读性很强的XML进行描述的,因此,思考的重点自然改变了,这种改变如同XSLT改变xml技术的面貌一样,Tangram的关键构思之一就是,如何解释一个XML描述,使之转化为一个真正的GUI,这个逻辑,彻底的解除了代码怪圈的束缚,使得人们从软件大厦的深度上得以解脱。
使用Tangram的最初的障碍也许是“思想”方面的问题,对于一个长期处于Coding状态的开发者而言,Tangram的构思可能是思维方面的一个盲点,也许,开发者很难意识到描述方案的改进将极大地简化他们的开发工作,同时也会极大的拓展他们的驾驭空间。XML非常适合描述带有层次性的结构,这是一个不争的事实,从Web开发方面的实践看,许多复杂的网站,基本都是通过XML技术实现的,特别是XSLT技术的出现使得XML的地位日渐巩固。一般来说,针对一个“平面用户区”,开发者通常的想法是用两种类型的结构对其进行“规划”:一种是“分割窗体”;另外一种是各种风格的“分页”窗体。对现代开发者而言,用这两类构架行为的窗体对一个特定的用户区域进行“架构”并不十分陌生。我们看到在类似
Eclipse、Visual Studio等大型软件框架已经在大量的使用这类手段以增强软件的综合表现力。在框架行为方面,如果能够将这两类具有架构行为的结构“规则化”,那么,基本的技术路线就大致奠定了。基于这样的考虑,我们首先构造一个最基本的Tangram XML节点,这个节点描述如下:
<TangramNode Name="ObjName"
Caption="Obj Caption"
ID="ObjID"
CnnID="TangramLiteTabWnd.TangramConnector"
VBA="0"
VBAID="0"
Width="446"
Heigh="143"
Tag=""
/>
这个
XML段落给出了一个最基本的Tangram元素的结构,名称属性给出一个Tangram节点的名称,以便开发环节检索对象,这个名称是唯一的,ID属性用来表示对象的ID值,无论是COM框架,还是.NET框架,都需要这个ID进行对象的创建,CnnID属性是给C++对象准备的,这个属性标示一个对象库,里面可以包含任意数目的C++ CView对象,其余的属性我们将陆续的进行解释。对于具有“切割”功能的切分窗体,我们可以采用XML子节点的模式进行描述,一个典型的切分窗体可以描述如下:
<TangramNode Name="sp2" ID="TangramSplitter" CnnID="TangramConnector" Caption="sp2" >
<Row>
<TangramNode Name="fm2" ID="ID" Width="596" Heigh="77" ></TangramNode>
<TangramNode Name="fm3" ID="ID2" Width="596" Heigh="109"></TangramNode>
</Row>
<Row>
<TangramNode Name="fm4" ID="ID" Width="596" Heigh="77" ></TangramNode>
<TangramNode Name="fm5" ID="ID2" Width="596" Heigh="109"></TangramNode>
</Row>
</TangramNode>
从这个节点看,这是一个
2行2列的切分窗体,xml可以使得这个窗体的描述变得十分清晰,并且可以进一步清晰的给出每个位置的对象的精确描述,对于各种风格的“分页”结构,可以采用类似的描述办法,事实上,一个分页窗体(Tabbed Window),可以在抽象意义上看做是一个1行n列的切分窗体,只不过在几何表示方面体现的UI风格不同而已,在Tangram框架的内部,分页窗体就是一种特殊的切分窗体。由以上的分析,我们可以看到,技术上只需处理如上两类节点即可形成一个原始的基础,现在一个关键的技术问题是:我们如何处理这些节点的迭代、复合,如果在技术上,将各种分页结构看作是切分窗体的特例,那么,技术的关键是切分窗体的“复合结构”,一旦这个问题得以解决,那么,只要给出足够多的分页风格,一个丰富多彩的UI框架世界,就归结为一个描述规则的建立,这是Tangram框架的一个关键的环节,也是使得UI架构逻辑摆脱代码约束的关键所在。
对一个没有子节点的Tangram节点,我们可以将其看作是Tangram“原子”,相当于一个基础的几何元件,这样,Tangram的动机就非常清晰了,一个基本的出发点就是,这些原子要复合出众多纷纭的UI世界,这既是一个朴素的想法,又是一个极富野心的创意。在Tangram的逻辑中,切分窗体体现着一种复合结构,也是一种“广义”的抽象,即其中已经包容了风格迥异的各种“Tabbed”窗体。在Tangram的世界里,由这类“广义”的切分复合形成的XML描述,我们将之称为“Tangram框架”,这种框架在独立的场合,将被转化为通常意义下的CFrameWnd对象,在其他场合,也许会被实现为另一个框架的一个局部,或者,被动态的创建于另外一个原子所在的“Site”,从这个意义上看,Tangram是一个动态的对接世界。切分窗体在技术上的实现体现了一种基于描述的动态递归的想法,在Tangram引擎的内部,这个地方是XML技术的绝好体现。Tangram对“框架”的构造,是从一个最原始的“原子”开始的,这个构造过程,体现为一个“所见即所得”的可视化设计过程,既然摆脱了代码的羁绊,我们也不能让开发者陷入复杂的XML写作逻辑,因此,所有的一切,伴随着设计过程的完结,相关的XML描述也就自然的形成了。
从结构方面看,Tangram里最关键的两个对象是:
1、Tangram“原子”,我们将其称为基本的Tangram元素,在真实的软件世界,这些原子,将被实现为各种C++的视图对象、ActiveX控件对象或者是.NET对象。这些林林种种的东西,将会形成一个丰富多彩的软件世界;
2、Tangram“框架”,框架本质上是切分窗体的复合体,框架以及框架复合形成的复合框架,相当于支撑这个世界的风格各异的建筑,开发者没有必要关心这些框架是如何产生的,只需关心这些框架能够提供什么方面的服务,如此,那些原子级别的元素就成为开发者必须关心的“事物”。
在Tangram引擎中,作为复合结构的Tangram框架体现为一个软件功能单元的“集合”,通常情况下,我们将其对应于VC++意义下的一个“文档模板”对象,因此,作为一种文档的体现形式,这类对象被保存在一种特殊的XML文件之中,我们将这类文件称为xtml文件,形式上,这类文件与html文件很类似,框架之间的复合行为与HTML文件中的超链接行为也很相似,在Tangram内部,框架的复合型为是通过“
Asynchronous Pluggable Protocols”实现的,我们通过一致的提供这种软件“超链接”能力,希望能够本质上提高软件组件之间的组合能力,以便形成一个公共的、内容外延广泛的公共软件资源空间,从新的层面提高软件的构造能力。
Tangram能够改变开发者的软件构造模式?这是一个微妙的问题,从动机上看,我们希望达到这个效果,从结果上看,大量的代码被风格清晰的xml描述替代,不容否认,事实上已经产生了改变,让我们看看Tangram带来的效果吧:
1、 几乎不需要Coding,你就可以生成表现力丰富的软件框架:
2、 用Web开发模式看待软件复合-功能强大的软件超级链接功能:
3、 基于Internet的软件扩展能力,一个特例,IE Band扩展:
4、 一个灵活健壮的桌面“Side Bar”系统:
开源版本的Tangram框架由于授权协议的限制,只能包含Tangram全部功能的一个子集,例如,无法提供对Microsoft Visual Basic for Application的支持,作为一个精简的框架,Tangram OpenSource 版仅仅提供了COM技术的支持,但足以确保开发者开发出强大、健壮的应用系统,以下是开源版本的屏幕截图:
欢迎各位开发者对Tangram系统提出宝贵意见。