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