когда использовать шаблон наблюдателя при разработке сайтов? - PullRequest
4 голосов
/ 31 августа 2010

Мне нужны некоторые практические примеры случаев, когда я мог бы использовать шаблон наблюдателя при разработке веб-сайта .. (используя php)

У меня есть один ", когда пользователь публикует статью (тему), класс RSS и класс EMAIL (наблюдатели) изменят rss и отправят электронное письмо администратору" , но я ' я даже не уверен, что это хороший пример ..

где вы используете шаблон наблюдателя?

Кстати: это не домашняя работа, я просто лежал здесь, думая об этом паттерне:)

EDITED Меня больше интересует «КОГДА делать это», а не «КАК это делать»

Ответы [ 3 ]

2 голосов
/ 31 августа 2010

У меня есть коллекция (массив) объектов (ячеек) как свойство объекта "cellCollection".Чтобы уменьшить использование памяти, каждая ячейка фактически хранится в сериализованной форме в кеше (файл на диске, APC, memcache и т. Д.), А объект cellCollection хранит свой массив указателей на местоположение кеша.Я использую шаблон наблюдателя так, чтобы объект «cellCollection» уведомлялся всякий раз, когда изменяется объект «ячейка», чтобы он мог обновлять мастер-копию этого объекта «ячейка» в кеше и при необходимости корректировать его указатели.

1 голос
/ 31 августа 2010

Обычно вам не нужен шаблон наблюдателя в более или менее свободном от состояния PHP.

Однако учтите следующее. Я пропустил некоторый код, но вы должны быть в состоянии заполнить пробелы.

class Stats extends Observer implements SplObserver
{
    private function updateStats($action) { }
    public function update(SplSubject $subject)
    {
        if ($subject instanceOf Article)
        {
            if ($subject->notice == Article::NOTICE_POSTED_ARTICLE)
            {
                $this->updateStats($subject->notice);
            }
        }
    }
}

class Article extends Subject implements SplSubject
{
    const NOTICE_POSTED_ARTICLE = "Article Posted";

    private $observers;
    public $notice;

    public function postArticle($text)
    {
        $this->notice = self::NOTICE_POSTED_ARTICLE;
        $this->notify();
    }

    public function notify()
    {
        foreach ($this->observers as $observer)
        {
            $observer->update($this);
        }
    }
}
0 голосов
/ 31 августа 2010

Я использую его каждый раз, когда происходит «действие».Эти вещи включают в себя базовую CRUD для каждого вида объектов (пользователя, контента, тегов и т. Д.), Но многие другие операции (вход пользователя, выход пользователя из системы, загрузка модуля, выход из модуля и т. Д.)

Я также предпочитаю использоватьVisitor шаблон после того, как что-то загружено или до того, как что-то сохранено (вставлено или обновлено в базе данных) или до того, как что-то (например, форма) отрендерено, чтобы изменить структуру данных.

Действия могут происходить несколько разв загрузке страницы.

...