Как реализовать Observer Pattern в PHP с глобальной областью действия и постоянством - PullRequest
1 голос
/ 28 марта 2012

Основная идея моей цели заключается в следующем:

  1. Пользователь A отправляет значение через форму в submit.php
  2. Пользователь B отслеживает отправленные значения, которые обновляются.через отправленное сервером событие, отправленное из updates.php.

submit.php, которое выполняет запись нового значения в базу данных, а также уведомление объекта-наблюдателя в updates.php.

Точки путаницы:

  1. Нужен ли каждому экземпляру (сеансу) updates.php собственный наблюдатель, поскольку каждый пользователь, просматривающий обновления, будет запускать свой собственный экземпляр сценария или можетвсе они совместно используют один и тот же глобальный объект-наблюдатель?

  2. Когда объект-объект загружается, где он собирается получить объекты-наблюдатели?Я не могу хранить / усыплять наблюдателей, так как они активны, верно?

  3. Если я иду с объектом ObjectStorage, когда вызывается submit.php и выбирает его,Являются ли они объектами-наблюдателями на самом деле объектами-наблюдателями, я имею в виду, вызовет ли их метод обновления фактическое обновление списка пользователей?

  4. Как я могу сохранить / получить ObjectStorageобъект из submit.php каждый раз при отправке формы?Очевидно, я не могу использовать сессии, верно?Как это было бы для пользователя?

Краткая версия: есть ли способ получить глобальный постоянный объект, содержащий наблюдатели на стороне субъекта, где наблюдатели являются живыми объектами?

Если есть лучшие или более простые подходы к этой идее (или если я просто полностью сбит с толку и нуждаюсь в обучении), пожалуйста, сообщите мне.Но я не ищу фреймворк, который уже может все это делать, так как я пытаюсь использовать этот проект, чтобы лучше понять шаблон Observer как идею.

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Важное примечание для вас, чтобы запомнить перед объяснением:

Шаблон проектирования - это решение, созданное для решения конкретной языковой проблемы (ограничение). Они не являются практическими правилами разработки архитектуры программного обеспечения на уровне языка.

Я не уверен, как вы можете видеть шаблон Observer, но я все равно постараюсь вам помочь:

  1. Нет. Сессия в вашем случае означает пользовательский экземпляр. Вы должны как-то работать с отдельными абстрактными Обозревателями, которые будут обрабатывать все экземпляры обновлений. Глобальный объект Observer - это путь;

  2. Да, они являются активными объектами, поскольку Наблюдатели регистрируют себя в Субъекте. В какой-то момент вам придется их перехватить;

  3. Всякий раз, когда субъект изменяется, он передает всем зарегистрированным наблюдателям, что он изменился, и каждый наблюдатель запрашивает субъект для этого подмножества состояния субъекта, за которое он отвечает за мониторинг. Я думаю, вы можете понять это из этого;

  4. Это действительно о дизайне реализации. Нет конкретного способа сделать это. Вы можете попробовать и посмотреть, что вам больше подходит;

В принципе, да, у вас может быть глобальный объект Observer, но это не совсем точка паттерна.

Попробуйте прочитать о реализации шаблона Observer и посмотрите, поможет ли это вам вообще.

0 голосов
/ 29 марта 2012

Я бы посоветовал вам изучить socket.io .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...