Zope的优点及和Apache+PHP+MySQL的比较
Zope能和Apache+PHP+MySQL进行比较是因为它即是http服务器,又是数据库,又包含脚本编程语言。现在向大家推荐Zope是因为它的功能更丰富,建立应用更容易,效率比PHP高几倍。现在的服务器端编程环境有IIS+ASP+sqlserver、Apache+PHP+MySQL、和现在的Zope,相比较Zope对于文档出版更专业。我曾经用过dw和frontpage编网页,就感觉frontpage的导航系统比较好,还有它能生成图形化的标题,和各种专业化的模板。dw的导航系统几乎不能用,但dw的网页制作更专业,dw的模板也有自己独特的地方。曾经想过将frontpage和dw相结合,但感觉很别扭。当网站的资料多了最迫切的需要是把资料放到数据库中,这样容易统一管理。常常奇怪大型的网站常常有统一的外观,丰富的导航系统,丰富的相关链接。肯定在网站的后面有专业的网站管理软件和专业的技术人员的支持。因此我常常寻找可以用的网站管理系统。在linuxfab.cx网站发现了Zope,终于找到了我想要的东西。
每当向人们推荐Zope的时候,总有人说我用PHP很好不用换,或说用ASP很好。ASP和PHP比较相似,都是可以在HTML中加入脚本语言。相比来说,我比较欣赏ASP,它是基于vb的,同时因为它有独立的脚本引擎,也可以支持Perl、Javascript等脚本。这样大家可以用自己熟悉的语言来编程不要另学新的语言。而PHP就比较奇怪,本来和Perl很相似,为什么不干脆用Perl来实现在页面的嵌入还要专门发明一种语言,来增加大家的学习负担,PHP虽然语言稍微清楚了一些,但没有根本的不同,却把Perl的精华模式匹配丢掉了。Perl也比较奇怪,为什么不象jsp一样推出相同的功能?因此心理上对PHP比较讨厌,虽然它和数据库的紧密结合,以及能生成图象的功能比较好。Zope虽然在网站管理上很出色,但它同时也是一个很好的编程环境。它支持Python和Perl,Python现在的发展势头很强,善于编制大的程序,是一个语法非常丰富的面向对象的数据库,在很多方面可以代替c和JAVA,编程效率要高很多,很有吸引力。我学完了Python正找不到使用的机会,Zope正好给了我使用Python的机会,也让我领教了Python的强大。->Zope整个程序都是用Python编的!
Zope是一个面向对象的数据库,是一个文档管理的数据库,是一个强大的http服务器,是一个完善的开发环境。从本质和出发点来说,Zope是一个文档管理数据库。它有大量的文档管理功能。
先说Zope做为http服务器的优势:
虽然Zope是个数据库,它的所有文档都放到数据库中而不是放到文件系统,但它却完成了一个类似文件管理器的管理界面和一个ftp接口,完全可以当作一个一个大家熟悉的文件系统来使用,管理习惯很熟悉。
而Zope又是一个面向对象的数据库,面向对象的数据库和一般的数据库很不一样,它不象关系数据库一样基于表格,而更象文件系统一样是树状结构的。从对象的角度来说,记录的各个域值就是对象的各个属性。它超越关系数据库的地方是能适应各种数据类型,每种数据类型都是一种对象,不但有各种属性,还有各种操作特定数据类型的方法。常常听说对象数据库,通过Zope才具体接触了对象数据库。(ingresql和userland的产品也是对象数据库)
Zope的特点是把文件和文件夹作为基本的对象,每个文件和文件夹都可以随意增加属性,同时,文件夹下面的文件和文件夹又是父文件夹的属性。通过增加脚本文件的形式,可以为文件和文家夹增加方法。比如,一个文件可以加入“作者”、“分类”、“难度等级”等属性,文件夹也可以加入“显示此文件夹下所有文件内容”的方法。
Zope还有它独特的方法来实现了对象级的继承。这个方法就是“获取”。比如文件系统的结构是/a/b/c,c是一个文件,在c中如果要引用一个变量v,如果c的属性中没有v,就到b的属性中找,然后找b下是否有叫v的文件,然后找a的属性,然后找a中的文件,然后找/目录的属性,找根下的文件。如果v是b的属性,就不用特别用a.b.v来引用。这样,c文件中就会从各级文件夹继承丰富的变量环境。一个典型的例子是,如果在根目录下放置了文件standard_HTML_header,就可以在任何目录下的文件引用它来表现每个网页的共性的东西。如果在某个目录下需要自己特有的网页效果,只要在这个目录下放一个特有的standard_HTML_header就可以了。这样,这个目录下的文件就会获得这个目录下的header,而不是根目录下的header,从而实现了每个栏目的个性。
获取的形式还可以是:c.m,m可以是方法,也就是脚本文件,比如用m来使c有另外一种表现形式。m文件可以放到b文件夹下,也可以放到a文件夹下,c.m的表达方法都成立。这样,我在根目录下放了m,网站的所有文件都有了方法m。
用url也可以支持这种获取,比如用http://my.com/a/b/c/m来调用方法m。同样,m的变量环境就是/a/b/c。
总结:Zope作为http服务器,可以使服务器中的文件和文件夹有属性和方法等丰富的附加信息。便于文件的查找和管理和表现等操作。同时,它又提供方便的文件操作。
Zope的现在的缺点是,不能直接使用外部文件,还要通过ftp复制到数据库中。现在有对这方面的补救措施,但不是Zope默认的。希望Zope将来能象操作自己的对象一样操作外部文件和其他网站的文件。
Zope作为数据库的优势:
从上面的论述,大家对Zope作为数据库的表现有了大概的印象。Zope和其他数据库相比,它是一个面向对象的文档数据库。
不像MySQL,Zope有可视的管理界面,Zope的所有的管理工作都是通过web来完成的。web界面的优点是跨平台,可以远程操作,便于界面的定制。Zope的管理界面和一个文件管理器类似,当点击一个文件后,有可以用同样的web界面来进行文件的编辑和添加属性、安全管理等。Zope的脚本调试也是用web完成的。
Zope作为数据库,有强大的用户权限管理功能,它的用户和权限管理非常强大,可以在某个文件夹下进行添加用户的操作,也分别对特定的对象都有自己的安全权限管理。
网站中数据库中主要的数据是文档,Zope作为文档数据库,有强大的文档管理功能,有版本管理、历史记录功能,有全文检索功能。同时集成了文档的编辑环境和管理环境,管理文档象在文件管理器中一样方便。这些都是一般的数据库所不具备的。
如果,数据库中有上万条记录,Zope的效率会比传统数据库要低,但Zope有大量的适配器来链接各种数据库。来实现纯表格操作和大量的记录操作。
Zope作为编程和定制环境的优势:
Zope有dtml(动态模板标记)语言来嵌入HTML中,实现网页的动态化。简单地使用地形式就可以插入动态内容。由于可以方便地加入属性和方法以及“获取”功能,文档具有极为丰富的变量环境。可以比一般的客户端包含提供更强大的功能。又有的形式来方便地获取多个文件地内容。在dtml中还可以嵌入Python表达式。这样,不用编程就具有强大的动态网页功能,实现导航功能等也轻而易举。这些功能的实现比PHP等语言要容易的多。
如果要加入复杂的功能,可以用脚本模块来实现函数和复杂操作,然后在dtml中调用脚本模块,这样,实现了逻辑和表现的分离。在Zope中允许用Python、Perl和sql做脚本语言,各种脚本可以相互调用,这样实现了多语言的混合编程,实现了.NET要实现的混合编程的目的。Zope为脚本语言提供了统一的Zope API。用这种方式(以dtml为媒体)Perl在unix中也可以实现嵌入HTML的效果。Perl爱好者有福了。在这里可以直接用sql操作数据库,免去了把sql嵌入其他语言的麻烦。
Zope提出了zclass的概念,在一个product中易做图了针对特定用途数据的一系列的属性和方法,甚至编辑和查看界面、特定权限、帮助等。比如把任务作为一个zclass,任务有任务的发出人、任务的执行人、任务的开始时间、完成时间、任务的内容等属性,也可以有一个任务的建立和完成的方法。这样当调用建立方法时给执行人发一封信,当调用完成方法时,给发出人发一封信。同时要有任务的web编辑界面,发出任务和修改任务的权限定义。当建立了这样一个zclass,就可以在任何文件夹中加入一个任务实例,Zope先检查用户是否有新建任务的权限,然后调出任务的编辑界面填入任务的各种属性,也有“建立”和“完成”按钮来调用方法。通过zclass可以方便地为Zope增加新功能。这种product的概念是PHP等语言所没有的功能,而通过product,Zope可以思路清晰地完成一项复杂地功能。
同时,在product的实现中,不但可以调用Zope API,还可以直接调用Zope本身的各种模块来实现更复杂的功能。因为Zope是开放源代码的,又是Python实现的,当编程中遇到难题时,可以随时参考Zope的源代码,方便的调用Zope模块和函数,甚至可以修改Zope代码,这些也是其他编程环境所没有的。
Zope的用户管理、版本管理等功能也是通过product来实现的,因此,Zope有一个标准的、开放的开发环境。
最近刚读了一篇文章,它用dos和windows的关系来类比Apache和Zope,在Apache中所有的东西都要自己来搞,如果不是自己搞,也要集合很多不同的程序来完成自己的任务,并且每个人的选择是不同的,这样,造成了相互之间没有共同语言,就像要编dos程序,要先自己到各处抓一些图形程序、打印程序、声音程序、安装程序等,来集合在一起,这样很容易出毛病。而在Zope中,有很多统一的API,当你完成一个product时,用户管理、权限管理、管理界面、编辑界面等这些都是Zope自带的,有API可用,就不用自己乱忙了。比如象zwiki,几乎不用它,Zope本身就是一个协同工作的产品自带用户管理和版本管理,这些就不用浪费时间白手起家了。文章中有一句话很好:“最差的统一编程界面也比没有统一好”。到cmf,Zope更提供了极为丰富的API。
最后,如果对Zope还有什么不满意,还可以