【发布时间】:2015-07-09 09:01:27
【问题描述】:
让我们想象一下我们的论坛系统,我想发表评论
class Thread
{
public function post ($userId, $threadId, $comment)
{
SQL INSERT INTO table $userId, $threadId, $comment
// sending emails
// public on a notice-wall
}
}
我不想硬编码sending emails 和public on a notice-wall 代码,因为即使它只是两个方法调用,也有损SRP 原则。我可以看到两种方式:
使用助手:
public function post ($userId, $threadId, $comment)
{
SQL INSERT INTO table $userId, $threadId, $comment
ForumHelper::sendEmailsAndPublicOnNoticeWall ($userId, $threadId, $comment);
}
但他们说这是不良做法的标志。 第二,我可以使用观察者模式。那用什么?
【问题讨论】:
-
您已经通过将 SRP 绑定到特定于存储的内容(即 SQL)来破坏伪代码中的 SRP。如果存储发生变化怎么办?或者如果它的版本/格式发生变化?这必须是数据映射模型层的工作。关于问题 - 使用一系列处理,您将在其中注册为您的方法执行所需的任何操作。然后您将能够对其进行配置并将实体逻辑与事件处理逻辑隔离 + 同时避免不明显的“触发”内容(想象一下 - 如果您在“观察”中有 10 多个事件 - 得到什么是多么痛苦发生在那个魔法中)
标签: php observer-pattern