const ghostSearchApiKey = '93722e96ae625aaeb360b7f295'

Логирование с помощью шаблона проектирования Observer

Код машин 2 дек. 2021 г.

По поводу логирования. Я там реализовал паттерн Observer, но в ручном режиме, так как ларавелевская реализация, насколько я понимаю, работает только с контроллерами.

В папке Commands/CommandsObserver/Intarfaces я сделал 2 интерфейса, один для наблюдателей, другой для сущности, которая будет наблюдаться.
Наблюдатель должен реализовывать метод update(), который и будет выполнять действие, когда будет получать уведомление от наблюдаемой сущности.

А наблюдаемая сущность должна уметь подписать на себя наблюдателя, попросить больше не наблюдать и уведомлять наблюдателя о событиях.

Наблюдатель реализуется в классе CommandObserver и является абстрактным. По сути, он занимается проверкой, что к ниму пришло уведомление именно от команды, а реализацию update() он делегирует классу Logger, который и выполняет логирование.

Наблюдаемой сущностью, я сделал класс CoreCommand, что бы не реализовывать методы attach(), detach() и notify() в каждой команде. А что бы команды наследовались от CoreCommand и тогда сразу содержали в себе реализацию этих методов

Так же, что бы передавать классу Logger информацию, которую нужно залогировать, помимо названия команды, в классе CoreCommand реализованы методы setLogInformation() и getLogInformation().

В итоге, что бы реализовать логирование, нам достаточно отнаследовать команду от CoreCommand и в методы setLogInformation() передать информацию, что нам нужно залогировать. и в handle() в конце написать parent::notify(), что бы уведомить наблюдателя, что произошло действие.

Теги

Все представленные на сайте материалы предназначены исключительно для образовательных целей и не предназначены для медицинских консультаций, диагностики или лечения. Администрация сайта, редакторы и авторы статей не несут ответственности за любые последствия и убытки, которые могут возникнуть при использовании материалов сайта.