Zope能和Apache+PHP+MySQL進(jìn)行比較是因?yàn)樗词莌ttp服務(wù)器,又是數(shù)據(jù)庫(kù),又包含腳本編程語(yǔ)言?,F(xiàn)在向大家推薦Zope是因?yàn)樗墓δ芨S富,建立應(yīng)用更容易,效率比PHP高幾倍。現(xiàn)在的服務(wù)器端編程環(huán)境有IIS+ASP+sqlserver、Apache+PHP+MySQL、和現(xiàn)在的Zope,相比較Zope對(duì)于文檔出版更專(zhuān)業(yè)。
我曾經(jīng)用過(guò)dw和frontpage編網(wǎng)頁(yè),就感覺(jué)frontpage的導(dǎo)航系統(tǒng)比較好,還有它能生成圖形化的標(biāo)題,和各種專(zhuān)業(yè)化的模板。dw的導(dǎo)航系統(tǒng)幾乎不能用,但dw的網(wǎng)頁(yè)制作更專(zhuān)業(yè),dw的模板也有自己獨(dú)特的地方。曾經(jīng)想過(guò)將frontpage和dw相結(jié)合,但感覺(jué)很別扭。當(dāng)網(wǎng)站的資料多了最迫切的需要是把資料放到數(shù)據(jù)庫(kù)中,這樣容易統(tǒng)一管理。常常奇怪大型的網(wǎng)站常常有統(tǒng)一的外觀,豐富的導(dǎo)航系統(tǒng),豐富的相關(guān)鏈接。肯定在網(wǎng)站的后面有專(zhuān)業(yè)的網(wǎng)站管理軟件和專(zhuān)業(yè)的技術(shù)人員的支持。因此我常常尋找可以用的網(wǎng)站管理系統(tǒng)。在linuxfab.cx網(wǎng)站發(fā)現(xiàn)了Zope,終于找到了我想要的東西。
每當(dāng)向人們推薦Zope的時(shí)候,總有人說(shuō)我用PHP很好不用換,或說(shuō)用ASP很好。ASP和PHP比較相似,都是可以在HTML中加入腳本語(yǔ)言。相比來(lái)說(shuō),我比較欣賞ASP,它是基于vb的,同時(shí)因?yàn)樗歇?dú)立的腳本引擎,也可以支持Perl、Javascript等腳本。這樣大家可以用自己熟悉的語(yǔ)言來(lái)編程不要另學(xué)新的語(yǔ)言。而PHP就比較奇怪,本來(lái)和Perl很相似,為什么不干脆用Perl來(lái)實(shí)現(xiàn)在頁(yè)面的嵌入還要專(zhuān)門(mén)發(fā)明一種語(yǔ)言,來(lái)增加大家的學(xué)習(xí)負(fù)擔(dān),PHP雖然語(yǔ)言稍微清楚了一些,但沒(méi)有根本的不同,卻把Perl的精華模式匹配丟掉了。Perl也比較奇怪,為什么不象jsp一樣推出相同的功能?因此心理上對(duì)PHP比較討厭,雖然它和數(shù)據(jù)庫(kù)的緊密結(jié)合,以及能生成圖象的功能比較好。Zope雖然在網(wǎng)站管理上很出色,但它同時(shí)也是一個(gè)很好的編程環(huán)境。它支持Python和Perl,Python現(xiàn)在的發(fā)展勢(shì)頭很強(qiáng),善于編制大的程序,是一個(gè)語(yǔ)法非常豐富的面向?qū)ο蟮臄?shù)據(jù)庫(kù),在很多方面可以代替c和JAVA,編程效率要高很多,很有吸引力。我學(xué)完了Python正找不到使用的機(jī)會(huì),Zope正好給了我使用Python的機(jī)會(huì),也讓我領(lǐng)教了Python的強(qiáng)大。->Zope整個(gè)程序都是用Python編的!
Zope是一個(gè)面向?qū)ο蟮臄?shù)據(jù)庫(kù),是一個(gè)文檔管理的數(shù)據(jù)庫(kù),是一個(gè)強(qiáng)大的http服務(wù)器,是一個(gè)完善的開(kāi)發(fā)環(huán)境。從本質(zhì)和出發(fā)點(diǎn)來(lái)說(shuō),Zope是一個(gè)文檔管理數(shù)據(jù)庫(kù)。它有大量的文檔管理功能。
先說(shuō)Zope做為http服務(wù)器的優(yōu)勢(shì):
雖然Zope是個(gè)數(shù)據(jù)庫(kù),它的所有文檔都放到數(shù)據(jù)庫(kù)中而不是放到文件系統(tǒng),但它卻完成了一個(gè)類(lèi)似文件管理器的管理界面和一個(gè)ftp接口,完全可以當(dāng)作一個(gè)一個(gè)大家熟悉的文件系統(tǒng)來(lái)使用,管理習(xí)慣很熟悉。
而Zope又是一個(gè)面向?qū)ο蟮臄?shù)據(jù)庫(kù),面向?qū)ο蟮臄?shù)據(jù)庫(kù)和一般的數(shù)據(jù)庫(kù)很不一樣,它不象關(guān)系數(shù)據(jù)庫(kù)一樣基于表格,而更象文件系統(tǒng)一樣是樹(shù)狀結(jié)構(gòu)的。從對(duì)象的角度來(lái)說(shuō),記錄的各個(gè)域值就是對(duì)象的各個(gè)屬性。它超越關(guān)系數(shù)據(jù)庫(kù)的地方是能適應(yīng)各種數(shù)據(jù)類(lèi)型,每種數(shù)據(jù)類(lèi)型都是一種對(duì)象,不但有各種屬性,還有各種操作特定數(shù)據(jù)類(lèi)型的方法。常常聽(tīng)說(shuō)對(duì)象數(shù)據(jù)庫(kù),通過(guò)Zope才具體接觸了對(duì)象數(shù)據(jù)庫(kù)。(ingresql和userland的產(chǎn)品也是對(duì)象數(shù)據(jù)庫(kù))
Zope的特點(diǎn)是把文件和文件夾作為基本的對(duì)象,每個(gè)文件和文件夾都可以隨意增加屬性,同時(shí),文件夾下面的文件和文件夾又是父文件夾的屬性。通過(guò)增加腳本文件的形式,可以為文件和文家?jiàn)A增加方法。比如,一個(gè)文件可以加入“作者”、“分類(lèi)”、“難度等級(jí)”等屬性,文件夾也可以加入“顯示此文件夾下所有文件內(nèi)容”的方法。
Zope還有它獨(dú)特的方法來(lái)實(shí)現(xiàn)了對(duì)象級(jí)的繼承。這個(gè)方法就是“獲取”。比如文件系統(tǒng)的結(jié)構(gòu)是/a/b/c,c是一個(gè)文件,在c中如果要引用一個(gè)變量v,如果c的屬性中沒(méi)有v,就到b的屬性中找,然后找b下是否有叫v的文件,然后找a的屬性,然后找a中的文件,然后找/目錄的屬性,找根下的文件。如果v是b的屬性,就不用特別用a.b.v來(lái)引用。這樣,c文件中就會(huì)從各級(jí)文件夾繼承豐富的變量環(huán)境。一個(gè)典型的例子是,如果在根目錄下放置了文件standard_HTML_header,就可以在任何目錄下的文件引用它來(lái)表現(xiàn)每個(gè)網(wǎng)頁(yè)的共性的東西。如果在某個(gè)目錄下需要自己特有的網(wǎng)頁(yè)效果,只要在這個(gè)目錄下放一個(gè)特有的standard_HTML_header就可以了。這樣,這個(gè)目錄下的文件就會(huì)獲得這個(gè)目錄下的header,而不是根目錄下的header,從而實(shí)現(xiàn)了每個(gè)欄目的個(gè)性。
獲取的形式還可以是:c.m,m可以是方法,也就是腳本文件,比如用m來(lái)使c有另外一種表現(xiàn)形式。m文件可以放到b文件夾下,也可以放到a文件夾下,c.m的表達(dá)方法都成立。這樣,我在根目錄下放了m,網(wǎng)站的所有文件都有了方法m。
用url也可以支持這種獲取,比如用http://my.com/a/b/c/m來(lái)調(diào)用方法m。同樣,m的變量環(huán)境就是/a/b/c。
總結(jié):Zope作為http服務(wù)器,可以使服務(wù)器中的文件和文件夾有屬性和方法等豐富的附加信息。便于文件的查找和管理和表現(xiàn)等操作。同時(shí),它又提供方便的文件操作。
Zope的現(xiàn)在的缺點(diǎn)是,不能直接使用外部文件,還要通過(guò)ftp復(fù)制到數(shù)據(jù)庫(kù)中。現(xiàn)在有對(duì)這方面的補(bǔ)救措施,但不是Zope默認(rèn)的。希望Zope將來(lái)能象操作自己的對(duì)象一樣操作外部文件和其他網(wǎng)站的文件。
Zope作為數(shù)據(jù)庫(kù)的優(yōu)勢(shì):
從上面的論述,大家對(duì)Zope作為數(shù)據(jù)庫(kù)的表現(xiàn)有了大概的印象。Zope和其他數(shù)據(jù)庫(kù)相比,它是一個(gè)面向?qū)ο蟮奈臋n數(shù)據(jù)庫(kù)。
不像MySQL,Zope有可視的管理界面,Zope的所有的管理工作都是通過(guò)web來(lái)完成的。web界面的優(yōu)點(diǎn)是跨平臺(tái),可以遠(yuǎn)程操作,便于界面的定制。Zope的管理界面和一個(gè)文件管理器類(lèi)似,當(dāng)點(diǎn)擊一個(gè)文件后,有可以用同樣的web界面來(lái)進(jìn)行文件的編輯和添加屬性、安全管理等。Zope的腳本調(diào)試也是用web完成的。
Zope作為數(shù)據(jù)庫(kù),有強(qiáng)大的用戶(hù)權(quán)限管理功能,它的用戶(hù)和權(quán)限管理非常強(qiáng)大,可以在某個(gè)文件夾下進(jìn)行添加用戶(hù)的操作,也分別對(duì)特定的對(duì)象都有自己的安全權(quán)限管理。
網(wǎng)站中數(shù)據(jù)庫(kù)中主要的數(shù)據(jù)是文檔,Zope作為文檔數(shù)據(jù)庫(kù),有強(qiáng)大的文檔管理功能,有版本管理、歷史記錄功能,有全文檢索功能。同時(shí)集成了文檔的編輯環(huán)境和管理環(huán)境,管理文檔象在文件管理器中一樣方便。這些都是一般的數(shù)據(jù)庫(kù)所不具備的。
如果,數(shù)據(jù)庫(kù)中有上萬(wàn)條記錄,Zope的效率會(huì)比傳統(tǒng)數(shù)據(jù)庫(kù)要低,但Zope有大量的適配器來(lái)鏈接各種數(shù)據(jù)庫(kù)。來(lái)實(shí)現(xiàn)純表格操作和大量的記錄操作。
Zope作為編程和定制環(huán)境的優(yōu)勢(shì):
Zope有dtml(動(dòng)態(tài)模板標(biāo)記)語(yǔ)言來(lái)嵌入HTML中,實(shí)現(xiàn)網(wǎng)頁(yè)的動(dòng)態(tài)化。簡(jiǎn)單地使用地形式就可以插入動(dòng)態(tài)內(nèi)容。由于可以方便地加入屬性和方法以及“獲取”功能,文檔具有極為豐富的變量環(huán)境??梢员纫话愕目蛻?hù)端包含提供更強(qiáng)大的功能。又有的形式來(lái)方便地獲取多個(gè)文件地內(nèi)容。在dtml中還可以嵌入Python表達(dá)式。這樣,不用編程就具有強(qiáng)大的動(dòng)態(tài)網(wǎng)頁(yè)功能,實(shí)現(xiàn)導(dǎo)航功能等也輕而易舉。這些功能的實(shí)現(xiàn)比PHP等語(yǔ)言要容易的多。
如果要加入復(fù)雜的功能,可以用腳本模塊來(lái)實(shí)現(xiàn)函數(shù)和復(fù)雜操作,然后在dtml中調(diào)用腳本模塊,這樣,實(shí)現(xiàn)了邏輯和表現(xiàn)的分離。在Zope中允許用Python、Perl和sql做腳本語(yǔ)言,各種腳本可以相互調(diào)用,這樣實(shí)現(xiàn)了多語(yǔ)言的混合編程,實(shí)現(xiàn)了.NET要實(shí)現(xiàn)的混合編程的目的。Zope為腳本語(yǔ)言提供了統(tǒng)一的Zope API。用這種方式(以dtml為媒體)Perl在unix中也可以實(shí)現(xiàn)嵌入HTML的效果。Perl愛(ài)好者有福了。在這里可以直接用sql操作數(shù)據(jù)庫(kù),免去了把sql嵌入其他語(yǔ)言的麻煩。
Zope提出了zclass的概念,在一個(gè)product中捆綁了針對(duì)特定用途數(shù)據(jù)的一系列的屬性和方法,甚至編輯和查看界面、特定權(quán)限、幫助等。比如把任務(wù)作為一個(gè)zclass,任務(wù)有任務(wù)的發(fā)出人、任務(wù)的執(zhí)行人、任務(wù)的開(kāi)始時(shí)間、完成時(shí)間、任務(wù)的內(nèi)容等屬性,也可以有一個(gè)任務(wù)的建立和完成的方法。這樣當(dāng)調(diào)用建立方法時(shí)給執(zhí)行人發(fā)一封信,當(dāng)調(diào)用完成方法時(shí),給發(fā)出人發(fā)一封信。同時(shí)要有任務(wù)的web編輯界面,發(fā)出任務(wù)和修改任務(wù)的權(quán)限定義。當(dāng)建立了這樣一個(gè)zclass,就可以在任何文件夾中加入一個(gè)任務(wù)實(shí)例,Zope先檢查用戶(hù)是否有新建任務(wù)的權(quán)限,然后調(diào)出任務(wù)的編輯界面填入任務(wù)的各種屬性,也有“建立”和“完成”按鈕來(lái)調(diào)用方法。通過(guò)zclass可以方便地為Zope增加新功能。這種product的概念是PHP等語(yǔ)言所沒(méi)有的功能,而通過(guò)product,Zope可以思路清晰地完成一項(xiàng)復(fù)雜地功能。
同時(shí),在product的實(shí)現(xiàn)中,不但可以調(diào)用Zope API,還可以直接調(diào)用Zope本身的各種模塊來(lái)實(shí)現(xiàn)更復(fù)雜的功能。因?yàn)閆ope是開(kāi)放源代碼的,又是Python實(shí)現(xiàn)的,當(dāng)編程中遇到難題時(shí),可以隨時(shí)參考Zope的源代碼,方便的調(diào)用Zope模塊和函數(shù),甚至可以修改Zope代碼,這些也是其他編程環(huán)境所沒(méi)有的。
Zope的用戶(hù)管理、版本管理等功能也是通過(guò)product來(lái)實(shí)現(xiàn)的,因此,Zope有一個(gè)標(biāo)準(zhǔn)的、開(kāi)放的開(kāi)發(fā)環(huán)境。
最近剛讀了一篇文章,它用dos和windows的關(guān)系來(lái)類(lèi)比Apache和Zope,在Apache中所有的東西都要自己來(lái)搞,如果不是自己搞,也要集合很多不同的程序來(lái)完成自己的任務(wù),并且每個(gè)人的選擇是不同的,這樣,造成了相互之間沒(méi)有共同語(yǔ)言,就像要編dos程序,要先自己到各處抓一些圖形程序、打印程序、聲音程序、安裝程序等,來(lái)集合在一起,這樣很容易出毛病。而在Zope中,有很多統(tǒng)一的API,當(dāng)你完成一個(gè)product時(shí),用戶(hù)管理、權(quán)限管理、管理界面、編輯界面等這些都是Zope自帶的,有API可用,就不用自己亂忙了。比如象zwiki,幾乎不用它,Zope本身就是一個(gè)協(xié)同工作的產(chǎn)品自帶用戶(hù)管理和版本管理,這些就不用浪費(fèi)時(shí)間白手起家了。文章中有一句話很好:“最差的統(tǒng)一編程界面也比沒(méi)有統(tǒng)一好”。到cmf,Zope更提供了極為豐富的API。
最后,如果對(duì)Zope還有什么不滿(mǎn)意,還可以使用cmf(內(nèi)容管理框架,Zope的二級(jí)開(kāi)發(fā)平臺(tái))來(lái)建立、管理網(wǎng)站,開(kāi)發(fā)新功能。cmf對(duì)Zope的用戶(hù)管理、文檔管理、product進(jìn)行了大量的擴(kuò)展來(lái)實(shí)現(xiàn)更加高端的功能。關(guān)于cmf的功能,需要另外寫(xiě)一篇文章來(lái)敘述。


