什么是对象发布?
作者:Amos 翻译:limodou
来源:http://www.zope.org/Members/Amos/WhatIsObjectPublishing/
Zope是一个“对象发布环境”。但它的确切涵义是什么呢?
动态内容
对象发布允许你生成动态内容。
不象HTML页面或CGI程序,Zope是以对象的方式来看待一个web应用的。对象是小的内容与行为的混合体。Zope允许你将对象编写在一起来生成强大而又灵活的对象集。这些对象集可以对web请求进行应答。结果就是动态内容。
这一点与通常所创建的web站点有很大的区别。仅仅将一组HTML页面和CGI脚本放在一起来生成一个web站点,并不能生成任何协作。当 HTML页面和CGI脚本被收集进一个web站点时,它们的行为没有什么不同。HTML页面仍然发送同样的静态内容,CGI脚本仍然执行着同样的处理。站点的元素之间不进行通信,而且当改变其中一个元素时,你需要手工更新其它的元素。
Zope却不这样。每个Zope对象感觉上是“聪明的”,它们是自适应的并且可以同其它对象进行通信。Zope对象是协同工作的。对象可以从其它的对象获得信息和作为。将对象联系在一起的方式决定了对于它们哪些服务和内容是有效的。(阅读What is Acquisition?可以了解更多的内容)接着对象适当地根据给定的上下文对象和内容表现自已。这就是发布(publishing)处理。
使用URL来引用对象
那么一个Zope对象是如何被发布的呢?通过URL请求。
为了在Zope中引用一个对象,你要使用URL。这一点与一个web服务器引用HTML文件的方式非常相似。这里有一个URL例子:
http://www.example.com/Users/Barney/Song
对于一个正常的web服务器来说,这个URL的意思是返回位于Users目录下的Barney目录下的名为Song的文件。对于Zope来说,这个URL意思是发布位于Userd对象内的名为Barney的对象内的名为Song的对象。
那么有什么不同吗?
对于Zope来说,每个对象都是动态的,例如,如果Song对象可以通过不同的方式来演唱,你只需要向URL增加额外的信息就可以请求一种不同的行为。如:
http://www.example.com/Users/Barney/Song/sing?audience=children&repeat:int=5
这个URL告诉Zope发布Song对象,通过调用它的sing方法,使用参数(audience="children", repeat=5)。
另外,上下文对象影响着对象是如何被发布的。所以在我们的例子中,Users对象可能定义了一个HTML页眉和页脚,同时Barney对象可能定义所有的文本为绿色。所以当Song对象发布自身的时候,在Barney和Users对象中的事实导致了歌词以绿色文本显示,并且带有一个标准的HTML 页眉和页脚。如果你将Song对象移到另一个位置,它将根据不同的上下文对象显示也不一样。
每一个Zope对象都是动态的,并且可以使用不同的方式来发布,从而展现不同的行为。