有一个ForumThread
类:
class ForumThread extends DbTable
{
public function insert ($threadId, $comment)
{
SQL INSERT INTO parent::tablename VALUES $threadId, $comment
// email sending how?
// putting this on a "notice-wall", how?
}
}
其他一些功能应该在这里完成,例如邮件发送。我不能把它放在这里,否则我违反了SRP。我不能把它放到controller
,因为我也想在其他地方插入帖子。我计划实现Observed模式,但我不能从两个类扩展。
答案 0 :(得分:1)
使用观察者模式,您必须从中发送通知 此方法为了执行相关的观察者代码。
您可以在insert方法中执行类似的操作:
$this->notify('table_insertion', $data);
然后在执行通知行之前的其他地方,必须像这样注册事件:
static::$observers['table_insertion'][] = array('class_to_call' => 'method_in_class_to_call');
通知方法类似于:
public function notify($event, $data) {
foreach(static::$observer[$event] as $class => $method) {
new $class->$method($data);
}
}
希望这是有道理的。