确定班级责任和合作者

时间:2009-03-06 18:23:23

标签: oop single-responsibility-principle

我正在使用ActiveRecord来维护有关用户的信息。 User类具有预期的load(),insert(),update()和delete()方法,setter,getter和其他一些。但我无法确定某些其他方法是否应包含在User类中,或由协作者处理。

以下是一个例子:

用户可能要求确认的事务有多个。这是以传统方式处理的 - 通过链接向用户发送电子邮件;单击该链接确认用户确实希望事务继续进行。验证密钥的散列及其到期日期/时间将作为用户记录的一部分保留。

在这个过程中我应该在哪里画线?是否应该有一个处理验证的协作者(例如,从查询字符串中获取纯文本验证密钥并接受用户对象作为参数)?或者应该由User类在内部处理(在方法调用中传递纯文本验证密钥)?

当然,在验证时会发生的下一件事是,交易将继续进行,需要更新活动记录 - 在我看来,用户类必须负责。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您应该将此任务委派给协作者,该协作者管理confirmations表。

您可以使用Confirmation模型跟踪所有确认要求。该模型将属于User,并管理确认哈希和待确认的操作(例如activate_accountchange_passwordchange_email等。

Confirmation控制器将负责验证确认哈希并在适当的模型上链接相应的操作(例如activate_account - > user.activate()change_password - &gt ; user.setPassword()等)并在成功完成后从Confirmation表中删除confirmations

这样可以更好地分离逻辑,并允许您更好地扩展,例如为给定用户提供多个待处理确认(例如确认更改密码确认更改其他内容。)