【发布时间】:2010-06-21 22:16:34
【问题描述】:
我正在寻找有关如何解决我提出的设计问题的建议。我目前正在使用 Symfony 框架,所以我将使用 Symfony 类的名称。
当用户在 Symfony 用户类中被“认证”或他们的“凭证”改变时,在当前使用的存储类上调用 regenerate()。 store 类扩展了 sfStorage。
现在,当这个 regenerate() 命令运行时,我们需要做一些业务逻辑。以下是我到目前为止提出的选项:
修改 addCredential、removeCredential、setAuthenticated 三个函数并告诉它们调度一个事件(setAuthenticated 已经这样做了),这样我们就知道要执行我们的业务逻辑了。
第二个选项是扩展 sfSessionStorage 类并告诉它在每次重新生成时抛出一个事件。我遇到的问题是 sfUser 要求接口 sfStorage。除非我们修改 sfStorage,否则如果有人传递了任何不知道添加事件的扩展 sfStorage 的类,它将无法工作。
第三个选项将是第二个选项,但我们仍将扩展用户对象以说明我们需要自定义 sfStorage 抽象类的接口,该抽象类在重新生成时发出通知。然后我们就可以确定任何通过的类都会遵循这个通知方法。
大家有什么建议吗?
【问题讨论】: