Как практически использовать паттерн Observer в laravel?

Итак, я изучаю шаблоны проектирования и в настоящее время изучаю шаблон Observer.

Чтобы реализовать это в сыром виде, я сделал что-то вроде этого:

<?php

class Subject
{
private $foo;
private $bar;

private $observers = [];

public function addObserver(Observer $o)
{
$this->observers[] = $o;
}

public function removeObserver(Observer $o)
{
if(($key = array_search($o, $this->observers, $TRUE)) !== FALSE) {
unset($this->observers[$key]);
}
}

public function notify()
{
foreach ($this->observers as $observer) {
$observer->update($this->foo, $this->bar);
}
}

public function setFoo($foo)
{
$this->foo = $foo;
}

public function setBar($bar)
{
$this->bar = $bar;
}
}

interface Observer{
function update($foo, $bar);
}

class Observer1 implements Observer
{
private $foo;
private $bar;

public function update($foo, $bar){
$this->foo = $foo;
$this->bar = $bar;
}

public function display()
{
echo "Observer1 : Foo -> " . $this->foo . " Bar -> " . $this->bar . "\n";
}
}

class Observer2 implements Observer
{
private $foo;
private $bar;

public function update($foo, $bar){
$this->foo = $foo;
$this->bar = $bar;
}

public function display()
{
echo "Observer2 : Foo -> " . $this->foo . " Bar -> " . $this->bar . "\n";
}
}

$subject = new Subject;$observer1 = new Observer1;
$observer2 = new Observer2;

$subject->addObserver($observer1);
$subject->addObserver($observer2);

$subject->setFoo(5);
$subject->setBar(10);
$subject->notify();

$observer1->display();
$observer2->display();

$subject->setFoo(20);
$subject->setBar(40);
$subject->notify();

$observer1->display();
$observer2->display();

Итак, я вижу, что наблюдатели обновляются. Это правильный способ реализации шаблона наблюдателя? Я думаю, я мог бы абстрагировать функциональность в Subject, чтобы добавлять, удалять и уведомлять в свой собственный абстрактный класс. Я также мог бы использовать SplSubject а также SplObserver что обеспечивает PHP. Что еще можно сделать здесь, чтобы сделать этот код лучше?

Но что я действительно хочу знать, так это то, где в Laravel используется шаблон Observer. Он должен использоваться где-то в рамках, и я могу извлечь из него уроки. Во-вторых, каковы практические применения для этого? Одна из вещей, о которой я мог подумать, это когда я занимаюсь кэшированием в laravel и когда модель обновляется, может потребоваться уведомление объектов кэша об изменении. Это хорошее практическое применение шаблона? Какие еще есть?

0

Решение

В моем проекте я использовал Observers, чтобы проверить, изменилась ли модель, и выдать событие, если изменения были сделаны.

Допустим, у меня есть Observer для моей модели пользователя, следовательно, UserObserver. Наблюдатель проверяет наличие изменений в моем пользователе. И если есть изменения.

У меня есть обработчик событий для сохранения транзакций.

Например, «Джон Доу обновил свое имя от Майка до Джона»

Где first name — это поле в моей пользовательской модели с именем first_name; Есть еще что-то для наблюдателей, и одно из них — мое заявление.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]