国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
為什么要選擇Zope 3

為什么要選擇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

1. 介紹

Zope3 的第一版在11月7日(2004年)發(fā)布了。這是Zope3項(xiàng)目史上的一個(gè)重大里程碑?;蛟S很多人都想知道如果他們將要使用Zope3話,到底對(duì)他們意味著什么,以及"為什么要選擇它"?需要嗎?不需要嗎...我將試圖回答這個(gè)問(wèn)題,或者至少,我提供足夠多的信息,讓人們自己來(lái)回答這個(gè)問(wèn)題。

首先,我將追思Zope3的歷史,講述它一路走來(lái)的原由。

2. 歷史:Zope和前身

Zope最初是設(shè)計(jì)給非技術(shù)用戶使用的,讓他們很容易就能管理信息,創(chuàng)建動(dòng)態(tài)的web應(yīng)用。有幾種途經(jīng)可以達(dá)到這個(gè)目的,比如:

  • 一個(gè)通過(guò)Web來(lái)管理數(shù)據(jù)、模板和腳本的環(huán)境
  • 提供SQL方法和數(shù)據(jù)庫(kù)連接,讓它可以很easy的使用關(guān)系數(shù)據(jù)
  • 一個(gè)內(nèi)嵌的索引機(jī)制,讓它可以很easy的提供搜索功能
  • 獲取機(jī)制,提供一個(gè)簡(jiǎn)單的方法可以從層層目錄中共享信息;還有
  • ZClasses,提供一個(gè)基本的方法,來(lái)創(chuàng)建新的content類型,并且/或者擴(kuò)展已有的content類型以提供新的方法或者模板

上面的這些方法,對(duì)于大多數(shù)的web應(yīng)用來(lái)說(shuō)工作得非常好了。實(shí)際上,有一些老土的、非技術(shù)人員開(kāi)發(fā)的內(nèi)容管理系統(tǒng)(content-management systems),僅僅使用了我說(shuō)的第一個(gè)方法。

2.1. 使用Python給Zope帶來(lái)的變化

然而,許多開(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ù))

  • 為了盡可能簡(jiǎn)單的提供豐富的功能(特別是對(duì)于非技術(shù)用戶而言),Zope做了許多自動(dòng)化的工作。這對(duì)于簡(jiǎn)單的應(yīng)用是非常好的,但是對(duì)于那些更復(fù)雜些的應(yīng)用,反而是一種障礙了。主要表現(xiàn)在以下方面:
    • 隱式獲?。╥mplicit acquisition); 還有
    • 文檔模板標(biāo)記語(yǔ)言(Document Template Markup Language ,DTML)所用的名字空間堆棧
    • 利用這些便利性,用戶可以不必嚴(yán)格的寫明到哪里查找就能獲得數(shù)據(jù)。大多數(shù)情況下這工作得很好,但是如果出現(xiàn)不可預(yù)料的命名沖突,它就很難查明相沖突的名字在哪里。就算它能運(yùn)行,也很難說(shuō)清楚它為什么能運(yùn)行。
    • 3.Zope提供了一種非常方便的安裝第三方產(chǎn)品(products)的機(jī)制。不幸的是,它很難適用于所有的產(chǎn)品。在傳統(tǒng)的Zope產(chǎn)品中,一個(gè)對(duì)象的所有功能都是它自己的類或者基類提供的。改變這些產(chǎn)品行為的唯一方式,是去修改或者子類化它們。修改產(chǎn)品并不是一個(gè)好主意,因?yàn)檫@讓維護(hù)升級(jí)變得很困難。子類化也是令人討厭的,因?yàn)樗鼤?huì)讓基類和子類之間耦合性得過(guò)于緊密了。(這就是眾所周知的脆弱的基類問(wèn)題。)Zope的CMF(Content- Management Framework)的一個(gè)最大的貢獻(xiàn)在于它的工作機(jī)制,它能把呈現(xiàn)和業(yè)務(wù)邏輯分離,能與目標(biāo)類無(wú)關(guān)的進(jìn)行管理,并且可以很容易的實(shí)現(xiàn)用戶化/定制。換句話說(shuō),這可以讓呈現(xiàn)和業(yè)務(wù)邏輯在不修改源碼和不使用繼承的情況下就能被用戶化/定制。

在2000年的晚些時(shí)候,Zope公司的工程師們想出了能讓Zope更好的為開(kāi)發(fā)人員服務(wù)的方法。主要是以下幾個(gè)方面。

  • 建立一個(gè)更好的模板系統(tǒng),讓開(kāi)發(fā)者和網(wǎng)頁(yè)設(shè)計(jì)師們能更容易的協(xié)同工作。在那個(gè)時(shí)候,Zope只有一個(gè)叫DTML的模板語(yǔ)言。DTML有一個(gè)大多數(shù)模板系統(tǒng)都會(huì)有的問(wèn)題,那就是模板本身不是合法的web頁(yè)面,不能用HTML編輯工具來(lái)編輯更新。一個(gè)設(shè)計(jì)師可以先做一個(gè)網(wǎng)頁(yè),但是在程序員插入代碼讓它變成動(dòng)態(tài)頁(yè)面后,它就失去控制了。我們工作的結(jié)果是設(shè)計(jì)出了一個(gè)更好的模板系統(tǒng)——ZPT(Zope Page Templates),已經(jīng)在2002年發(fā)布了。
  • 提供一個(gè)組件模型,讓定制產(chǎn)品更容易。意思就是說(shuō),要把產(chǎn)品功能分解成更精練的、可以單獨(dú)升級(jí)的零部件。
  • 用一些像傳統(tǒng)model-view-controller (MVC)或是文檔視圖(document-view)的架構(gòu),讓呈現(xiàn)與業(yè)務(wù)邏輯完全的分離。

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的最大的原因所在。

2.2. 接下來(lái)的歷史

在經(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):

  • 改善開(kāi)發(fā)體驗(yàn),提供一個(gè)更合理的開(kāi)發(fā)模式,吸引Python和其它的開(kāi)發(fā)者
  • 讓在Zope中創(chuàng)建有用的對(duì)象更簡(jiǎn)單
    • o讓使用現(xiàn)存的Python類成為可能(作最少的或者不作修改) o要使用Zope的功能,只要作少量的額外改變
  • 讓學(xué)習(xí)曲線變得平滑
  • 讓軟件重用更加便利
    • o 使用已存在的非Zope特色的對(duì)象 o 增加、刪除、替換現(xiàn)有對(duì)象的功能 o 改變現(xiàn)有對(duì)象的用戶接口 o 提供可替換的訪問(wèn)對(duì)象的方式(比如FTP,XML-RPC,wxWindows)
  • 配置Zope軟件更靈活
  • 借鑒那些從使用、開(kāi)發(fā)Zope2積累的經(jīng)驗(yàn)教訓(xùn)
  • 把CMF的技術(shù)和開(kāi)發(fā)模式整合到Zope中去

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ù)。

3. 開(kāi)放的進(jìn)程

在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年的一月和二月。

  • 使人們加入到Zope3的開(kāi)發(fā)中來(lái)
  • 建設(shè)這個(gè)社區(qū);還有
  • 完成重要的工作

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)目。

4. 發(fā)現(xiàn)之旅

從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)了。我們做到了:

  • 養(yǎng)成了測(cè)試的習(xí)慣
  • 養(yǎng)成了一個(gè)優(yōu)秀的文化:為了讓事情做到最好試著把步伐慢下來(lái),如果有必有情愿把工作重新來(lái)過(guò);還有
  • 創(chuàng)立了一個(gè)新的方法來(lái)試著把文檔和測(cè)試結(jié)合起來(lái),這很快成了一個(gè)非常積極的習(xí)慣。

5. X3.0的發(fā)布

到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)定的功能。

6. Five項(xiàng)目

最近有個(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ì):

  • 它提供了一個(gè)非常清晰的開(kāi)發(fā)模式。試用過(guò)Zope3的開(kāi)發(fā)者們都會(huì)發(fā)現(xiàn)它是一個(gè)比Zope2更具生產(chǎn)力的開(kāi)發(fā)環(huán)境
  • Zope 3更容易適應(yīng)特殊的業(yè)務(wù)需求。有趣的是Zope3應(yīng)用再也不像傳統(tǒng)的Zope應(yīng)用了。舉例來(lái)說(shuō),一個(gè)應(yīng)用不再需要使用傳統(tǒng)的"對(duì)象文件"模式,Zope3讓那些使用關(guān)系數(shù)據(jù)庫(kù)的應(yīng)用變得簡(jiǎn)單得多
  • Zope3被設(shè)計(jì)為從底層支持I18n 和 L10n應(yīng)用
  • Zope3提供了很好的文檔:一本書(還在不斷增加中),一個(gè)教程,一個(gè)內(nèi)嵌的Api參考手冊(cè),和一個(gè)在不斷細(xì)化的內(nèi)部開(kāi)發(fā)文檔。

== 你該使用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è)字)

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
專題:Zope應(yīng)用開(kāi)發(fā)指南
Web開(kāi)發(fā)的10款最佳Python框架
易開(kāi)發(fā)創(chuàng)始人潘俊勇:這些年我遇到的那些坑
Python高級(jí)編程
策劃開(kāi)發(fā)一個(gè)項(xiàng)目 at onling’s blog
Python中文文檔
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服