Логирование с помощью шаблона проектирования 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(), что бы уведомить наблюдателя, что произошло действие.

Теги

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.

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