Я ищу совет о том, как решить проблему дизайна, с которой я столкнулся. В настоящее время я использую платформу Symfony, поэтому буду использовать имена классов Symfony.
Когда пользователь становится «аутентифицированным» или его «учетные данные» изменяются в пользовательском классе Symfony, возрождается () для используемого в настоящее время класса хранения. Класс store расширяет sfStorage.
Теперь, когда эта команда регенерировать () запущена, нам нужно выполнить некоторую бизнес-логику. Ниже приведены варианты, которые я придумал:
Измените три функции, которые addCredential, removeCredential, setAuthenticated, и попросите их отправить событие (setAuthenticated уже выполняет), чтобы мы знали, как выполнять нашу бизнес-логику.
Вторым вариантом будет расширение класса sfSessionStorage и указание ему генерировать событие при каждой регенерации. Проблема с этим заключается в том, что sfUser запрашивает интерфейс sfStorage. Если мы не изменим sfStorage, то если кто-то пройдет какой-либо класс, расширяющий sfStorage, который не знает, как добавить событие, это не сработает.
Третий вариант будет вторым, но мы все равно расширим объект пользователя, чтобы сказать, что нам требуется интерфейс пользовательского абстрактного класса sfStorage, который отправляет уведомление о регенерации. Тогда мы бы точно знали, что любой проходящий класс будет следовать этому методу уведомления.
У кого-нибудь есть предложения?