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對“架構”的構造,是從一個最原始的“原子”開始的,這個構造過程,體現為一個“所見即所得 (WYSIWYG)”的可視化設計過程,既然擺脫了代碼的羈絆,我們也不能讓開發人員陷入複雜的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系統提出寶貴意見。