这是一个非常基本的设计问题,但我似乎无法找到答案。我将使用一个非常简单的示例,但我关注的是模型级计算(在此示例中为“2 + 2”)变得复杂的情况。
假设我正在设计一个在Zope或Plone中运行的应用程序;它的工作是添加两个数字。 Dexterity让我可以轻松创建包含字段addend1和addend2的内容类型,并为我生成添加,编辑和显示表单。我可以修改显示形式以显示一个名为“sum”的字段,但“sum”是我模型中大量计算的结果,我不想在“添加”或“编辑”表单中显示它作为计算的结果,我不需要它作为输入。我不想在我的视图中计算它,因为它很昂贵,我想在最初计算之后重复使用它,并且我不希望我的“视图”需要知道我如何进行计算。
那么什么是适当的“zca”ish方法来做模型工作,它与结果的呈现没有任何关系?我是否创建了一个像ISum这样的接口并创建了一个适配器,将我的内容类型转换为一个包含总和的接口,然后为ISum接口做一个视图?如果不是那样,那是什么?搜索PP4D和Zope 3开发人员手册没有帮助。
提前感谢任何见解。
答案 0 :(得分:5)
使用事件;您可以在添加或编辑内容类型时注册事件处理程序,并在这些事件触发处理程序时在对象上设置值。