為什么要選擇Zope 3
#原著(zhù):Jim Fulton(CTO of Zope Corporation)#來(lái)源:http://www.zopemag.com/Issue010/Section_Articles/article_WhyZope3.html#翻譯:alang 2005/08/28 (alang.yl # gmail.com)- - - - - - - - - - - -By Jim Fulton | February 12, 2005
Zope3 的第一版在11月7日(2004年)發(fā)布了。這是Zope3項目史上的一個(gè)重大里程碑?;蛟S很多人都想知道如果他們將要使用Zope3話(huà),到底對他們意味著(zhù)什么,以及"為什么要選擇它"?需要嗎?不需要嗎...我將試圖回答這個(gè)問(wèn)題,或者至少,我提供足夠多的信息,讓人們自己來(lái)回答這個(gè)問(wèn)題。
首先,我將追思Zope3的歷史,講述它一路走來(lái)的原由。
Zope最初是設計給非技術(shù)用戶(hù)使用的,讓他們很容易就能管理信息,創(chuàng )建動(dòng)態(tài)的web應用。有幾種途經(jīng)可以達到這個(gè)目的,比如:
上面的這些方法,對于大多數的web應用來(lái)說(shuō)工作得非常好了。實(shí)際上,有一些老土的、非技術(shù)人員開(kāi)發(fā)的內容管理系統(content-management systems),僅僅使用了我說(shuō)的第一個(gè)方法。
然而,許多開(kāi)發(fā)者并不滿(mǎn)足于一個(gè)只是預先寫(xiě)好對象、通過(guò)web來(lái)定制的工具。對于這些開(kāi)發(fā)者來(lái)說(shuō),必須有一整套開(kāi)發(fā)工具和APIs的集合提供才行。比如他們才能構建額外的文件系統庫,使用Python靈活的APIs。
對于Zope2的Python開(kāi)發(fā)者們來(lái)說(shuō),已經(jīng)有了一些顯著(zhù)的變化:
1.Zope2這個(gè)framework非常復雜,這在很大程度上應歸咎于應用領(lǐng)域的固有復雜性。Zope有許多特性,涵蓋了從事務(wù)管理、安全性到標準元數據等方方面面。新Zope應用通常需要所有這些功能都協(xié)同工作。繼承機制通常用來(lái)管理復雜事物,但是延伸的范圍并不廣。為了只提供最基本的功能,一個(gè)名叫 SimpleItem的類(lèi)被提出來(lái)了。這個(gè)名字提醒人們,一個(gè)對象只需要提供最基本的功能就行了,而不要做過(guò)多額外的事,盡管這個(gè)基本類(lèi)本身還有許多基類(lèi)。這些基類(lèi)為了方法的重載或者提供配置數據等不同的目的而被定制得專(zhuān)用化了。搞清楚哪些是要被重載的,哪些是要配置的,以及這些繁多的基類(lèi)如何互相調用,這工作太難了。(真的是不可能的任務(wù))
在2000年的晚些時(shí)候,Zope公司的工程師們想出了能讓Zope更好的為開(kāi)發(fā)人員服務(wù)的方法。主要是以下幾個(gè)方面。
Python就是Zope的"秘密武器"。Zope正與市場(chǎng)上的眾多基于Java的方案在競爭。為什么相比于基于Java的應用服務(wù)器,用Zope開(kāi)發(fā)應用更具生產(chǎn)力?主要原因就是因為我們有Python。盡管有上面的這些吹捧(牛B),然而對于Python程序員來(lái)說(shuō),Zope并沒(méi)有太多的吸引力。(說(shuō)的的確是實(shí)情。Jim還是有自知之明的。譯注) 為了讓Zope對Python程序員產(chǎn)生更大的魅惑,為了讓我們更好的撬動(dòng)Python的力量,這就是我們開(kāi)發(fā)Zope3的最大的原因所在。
在經(jīng)歷了幾次頭腦風(fēng)暴之后不久(或許與之并無(wú)關(guān)聯(lián)),Zope公司雇傭了核心的Python開(kāi)發(fā)團隊,Python Labs,他們帶來(lái)了新的敏銳的洞察力。(請讀者們回想一下Guido是什么時(shí)候在Zope公司呆過(guò)?譯注)
正如上面提到的,那些頭腦風(fēng)暴的一個(gè)早期成果就是ZPT了。它讓開(kāi)發(fā)者和(網(wǎng)頁(yè))設計者的協(xié)同工作成為了可能。
我們意識到,一個(gè)類(lèi)MVC的framework是需要一個(gè)組件架構的,于是我們研究了一下,它(的功能之一)應該支持業(yè)務(wù)邏輯和呈現的分離。
在一個(gè)無(wú)狀態(tài)的環(huán)境比如HTTP里面,使用組件架構是一個(gè)大的挑戰。在無(wú)狀態(tài)環(huán)境下,每一次request所需要的組件都要被裝配,這意味著(zhù)組件裝配必須要很容易的就能進(jìn)行。
請注意CMF也提供了一些組件系統的特點(diǎn)。業(yè)務(wù)代碼已經(jīng)被從內容對象中分離了,并且分成了tools和skins。Tools是提供特定業(yè)務(wù)功能的組件。 Skins是提供呈現和業(yè)務(wù)分離的,重點(diǎn)在呈現上。雖然CMF能滿(mǎn)足我們的一些需求,并且也示范了把業(yè)務(wù)邏輯和呈現從數據管理中分離的一些好處,但是我們還想看看,我們能不能把事情做得更好。具體的來(lái)講,我們想要用對象來(lái)擴展功能,而不是用一個(gè)個(gè)的模板和腳本。CMF依賴(lài)獲取機制(acquisition),這意味著(zhù)所有的模板和腳本都共享著(zhù)一個(gè)共同的命名空間(namespace),而不管內容的類(lèi)型是什么。名字最好要包含類(lèi)型信息,并且要小心謹慎的?。ㄒ蝗痪涂赡苤孛?。
我們考慮了一個(gè)初步的組件分類(lèi),分成內容,視圖和業(yè)務(wù)組件,大至對應著(zhù)MVC。還設計了一個(gè)通過(guò)注冊和橫切(traversal)組件的方法來(lái)進(jìn)行組件裝配的機制(component-assembly mechanism)。組件裝配基于對象的連結,通過(guò)接口(interfaces)。
我們創(chuàng )建了最初的原型,讓組件裝配的想法能夠付渚實(shí)施。這給未來(lái)的工作激發(fā)了足夠強的希望。
在早期原型工作之后,我們編出了關(guān)于組件如何工作的更詳細的故事,設立了一個(gè)簡(jiǎn)短的培訓課程,用幻燈片來(lái)演示組件處理的流程。這個(gè)演講是虛構的,描述了還沒(méi)有寫(xiě)出來(lái)的軟件(的工作機制)。Python Labs團隊就埋頭至力于定出開(kāi)發(fā)流程(應該指的是詳細設計。譯者注),并且提供反饋/建議。我把這個(gè)演講進(jìn)行了許多次,不斷根據反饋來(lái)更新我的培訓課程。實(shí)際上,這個(gè)培訓課程已經(jīng)成了組件架構的第二個(gè)原型了。
在做詳細設計的過(guò)程中,確定了一個(gè)主要的目的(超越了組件開(kāi)發(fā)),要提供一個(gè)可以吸引Python程序員們的開(kāi)發(fā)模式。Zope 2的Python產(chǎn)品有太多的Zope特有的配置信息混雜在其中,這讓這些python代碼拒人于千里之外,既難讀又難懂。
在作這種努力的過(guò)程中,我們覺(jué)得可以通過(guò)確立Zope將會(huì )是什么樣的公開(kāi)的想法/思路,來(lái)極好的改善開(kāi)發(fā)體驗。我們決定把Zope3用為Zope的一個(gè)主要版本來(lái)推進(jìn)。
在2001年將要結束的時(shí)候,我們在tutorial中不斷的重申,明確要從事的Zope3項目要達到下面這些目標:
Tres Seaver在Zope公司內部已經(jīng)鼓吹了很長(cháng)時(shí)間的極限編程(Extreme Programming ,XP)了。在我們需要著(zhù)手Zope3的實(shí)現工作時(shí),我決定同時(shí)也償試一下XP。我們制定了一個(gè)為期3天的開(kāi)發(fā)活動(dòng),我把它叫做"sprint"(請參看 ZopeMag的Zope Sprinting指南來(lái)了解相關(guān)情況。原編輯注),盡可能用最快速度創(chuàng )建一個(gè)最小的Zope3的原型。我們使用了結對編程(pair- programming),故事/情景板,單元測試。這個(gè)活動(dòng)證明了這時(shí)的生產(chǎn)力是極高的。
我們在Zope公司還舉行了其它的一些Sprint活動(dòng),學(xué)習一直在進(jìn)行,也得到了許多重要的早期進(jìn)步。
Zope3最初是作為Zope2的一個(gè)分支開(kāi)始的。我們很快意識到,已有Zope2代碼的桎梏讓人很難爆出新思想的火花。向后兼容老的代碼,讓人分心不少。最后我們決定,在一開(kāi)始不考慮向后兼容的問(wèn)題,很快地我們就為Zope3建立了一個(gè)獨立的開(kāi)發(fā)樹(shù)。
在2001年12月,在開(kāi)放Zope倉庫來(lái)捐獻給Zope公司外部的過(guò)程中,我們對Zope社區公開(kāi)了Zope3項目。Zope3提供了一個(gè)重大的機會(huì ),讓人人能參與到Zope的過(guò)程中來(lái)。我們推廣了sprint,在Fredericksburg舉行了三次python sprints,分別在2002年的一月和二月。
sprint活動(dòng)最重要的好處是讓人們能碰個(gè)面,互相認識,還有相互合作。這讓后來(lái)的遠程工作變得更容易了。
Zope3項目也導致了為Zope工作的人數大量增長(cháng)。主要的和大多數的代碼都來(lái)自Zope公司之外的貢獻。Zope3是個(gè)名副其實(shí)的社區項目。
從Zope3項目宣布到現在,已經(jīng)整整3年了,這比預期的長(cháng)了許多。大多數功能是在第一年開(kāi)發(fā)出來(lái)的,那時(shí)進(jìn)展神速,并且是在沒(méi)有任何Zope2代碼的基礎上,只是從一個(gè)廣闊的社區中得來(lái)的。在2002年底,我們開(kāi)發(fā)出了我們認為應該是第一個(gè)alpha版的release。
在2003年初,我們進(jìn)行了一連串的"geddons",這是一個(gè)為了及時(shí)的在夏天完成Zope3所進(jìn)行的重構工作。這是評估我們工作成果的一段時(shí)期。然而基于我們的經(jīng)驗,我們發(fā)現原始設計方面需要修改。到2003年的秋天,我們已經(jīng)作了許多重大的改進(jìn),但是又確信還有許多修改要做,一直要進(jìn)行到2004 年。
從2003年初到2004年是一個(gè)鞏固基石的時(shí)期。只增加了為數不多的新功能。工作重心幾乎全部放在建造一個(gè)可供日后增添功能的穩固的基石上。大致可以描述為--簡(jiǎn)化框架!后期增加的代碼大部分又去掉了。
許多修改是十分有意義的。舉例來(lái)說(shuō),我們停止使用上下文包裝(context wrappers)來(lái)指明對象的位置(location),換為了直接保存位置路徑,這使得位置感知(location-aware)和對象引用的代碼被大大簡(jiǎn)化了。我們完全重寫(xiě)了大部分的子系統,這些修改極大的完善了最終系統的結構。這些是可行的,因為我們希望花些時(shí)間,來(lái)從最初的失誤和重做工作中得到一些教訓。
作出要慢下來(lái)并且要從容不迫、花費雙倍的時(shí)間來(lái)做出第一個(gè)發(fā)行版的決定,是基于我們要求卓越的承諾,還有,意識到了我們不必那么操之過(guò)急。因為不管怎么樣,Zope2還是一個(gè)優(yōu)秀的系統,它還有很長(cháng)的生命周期呢。
在Zope3的工作中,我們的開(kāi)發(fā)流程也改進(jìn)了。我們做到了:
到2004年初,已經(jīng)有了好幾個(gè)使用Zope3的產(chǎn)品了。很明顯的,Zope3已經(jīng)為產(chǎn)品應用作好了準備,雖然還缺乏幾個(gè)功能或者還沒(méi)有準備好要發(fā)布。一些本可以在產(chǎn)品中很技巧性的使用Zope3的人,不愿在他們所需要的功能沒(méi)有穩定之前冒險這樣做。我們決定縮小第一個(gè)release的目標,只包含那些已經(jīng)穩定的基本功能,能讓那些不需要傳統的通過(guò)web在線(xiàn)開(kāi)發(fā)(through-the-web development)功能的人開(kāi)始使用Zope3。我們給Zope X3.0定位于開(kāi)發(fā)人員發(fā)行版,只包含那些從2004年初夏起就已經(jīng)穩定的功能。
最近有個(gè)開(kāi)發(fā)項目Five(http://codespeak.net/z3/five/),可以在Zope2中使用Zope3的組件架構,來(lái)提供部分的Zope3的功能。
現在的Zope3還不向后兼容Zope2,雖然有Five項目的一些努力,但是許多Zope3的功能都不能用于Zope2.
現在的Zope3是給Python開(kāi)發(fā)者們用的。還沒(méi)有對web在線(xiàn)開(kāi)發(fā)的功能提供穩定的支持,盡管已經(jīng)有了簡(jiǎn)單的試驗版。我覺(jué)得一段時(shí)間之后就不成問(wèn)題了。
有許多Zope3的第三方產(chǎn)品,部分已經(jīng)在Zope2中成熟穩定了,象cataloging,已經(jīng)包含于Zope3中了。
基于上面這些有限的信息,Zope3給你展現了一些顯著(zhù)的優(yōu)勢:
== 你該使用Zope3嗎?==
Zope 3 既有重大的改進(jìn),也有相對于Zope2的局限性。是否需要使用它依賴(lài)于你的實(shí)際情況。幸運的是你不必馬上轉換到Zope3上面。Zope2還將伴隨我們相當長(cháng)的時(shí)間。實(shí)際上,Zope2可以讓我們從容不迫的對待Zope3。要感謝Five項目,你可以在Zope2的應用里面使用部分的Zope3技術(shù)。隨著(zhù)時(shí)間的過(guò)去,Zope2也會(huì )具有更多的Zope3特性,讓最后轉變到Zope3的結局更簡(jiǎn)單更容易。
(全文完)(不含空格11269個(gè)字)
聯(lián)系客服