2016-09-01 2 views
0

그래서 디자인 패턴을 배우고 있으며 현재 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에있는 기능을 추상화하여 자체 추상 클래스에 추가, 제거 및 알림 할 수 있다고 생각합니다. PHP가 제공하는 SplSubjectSplObserver도 사용할 수 있습니다. 이 코드를 더 잘 만들려면 여기에서 무엇을 할 수 있습니까?

하지만 실제로 알고 싶은 것은 Laravel에서 사용되는 Observer 패턴이 어디에 있는지입니다. 프레임 워크의 어딘가에서 사용해야하며 배울 수 있습니다. 둘째, 이것에 대한 실제 적용은 무엇입니까? 내가 생각할 수있는 것 중 하나는 laravel에서 캐싱을 수행 할 때 모델이 업데이트되면 캐시 객체에 변경 사항을 알릴 필요가있을 수 있습니다. 이것은 패턴의 좋은 실제 적용인가? 다른 사람들이 거기에 있습니까?

답변

0

내 프로젝트에서 Observers를 사용하여 모델이 변경되었는지 확인하고 변경 사항이 발생하면 이벤트를 throw합니다.

내 Observer가 내 사용자 모델에 해당하므로 UserObserver가 있다고 가정 해 보겠습니다. 관찰자가하는 일은 내 사용자의 변경 사항을 확인하는 것입니다. 그리고 변화가 있다면.

트랜잭션을 저장하는 이벤트 처리기가 있습니다.

는 "신원 미상 존에 마이크에서 자신의 이름을 업데이트했습니다"예컨대 이름은 FIRST_NAME라는 이름의 내 사용자 모델의 필드가

; 옵서버에게는 더 많은 것이 있고, 하나는 내 애플리케이션입니다.

관련 문제