1
我正在開發一個用於教育目的的MVC框架。現在我被困在我應該如何處理框架中的事件。簡單依賴注入和解耦的事件處理
我一直在尋找的最接近的答案是Adding events to an interface/implementation,但它沒有說任何有關注射部分。
我的問題是,兩種方法都足夠好嗎?它們是分離的嗎?
該語言是PHP,但將其視爲僞代碼。
This 第一個例子是一種C#方法。 ClassA
注入Kernel
課程,並且訂閱該活動是它自己的責任。
class Kernel{
public $onInit = new EventHandler();
public $onTerminate = new EventHandler();
public function __construct(){
}
public function boot(){
//...dosomething
$this->onInit->raise($this, new EventArgs());
$this->onTerminate->raise($this, new EventArgs());
}
}
class ClassA{
public function __construct($kernel){
$kernel->onInit->add(array($this,'onKernelInit'));
}
public function onKernelInit($sender, $args){
$this->doSomething($sender);
}
public function doSomething(Kernel $kernel){}
}
第二種方法是負責訂閱事件的中間類。 ClassAListener
注入ClassA
和KernelEventDispatcher
。
class Kernel{
public $dispatcher;
public function __construct(KernelEventDispatcher $dispatcher){
$this->dispatcher = $dispatcher;
}
public function boot(){
//do something...
$this->dispatcher->raiseInit($this, new EventArgs());
$this->dispatcher->raiseTerminate($this, new EventArgs());
}
}
class ClassAListener{
public function __construct(ClassA $classA, KernelEventDispatcher $dispatcher){
$this->classA = $classA;
$dispatcher->onInit(array($this, 'onKernelInit'));
}
public function onKernelInit($sender, $args){
$classA->doSomething($sender);
}
}
我傾向於第二種方法,因爲它是乾淨多了,但我不知道是否「走出正確的方式」它(處理事件)。
任何幫助表示讚賞。
+第二種方法。第一種方法在EventHandler上創建一個未發佈的依賴項......這個框架是否可供大衆或私人聽衆使用? – Orangepill
現在我的框架的主要目標是學習新東西(我學到了很多;設計模式,依賴注入等)。我想讓它開源,但取決於我對結果(代碼)的滿意程度。並感謝您的意見。 – OsakaHQ
使它開放源代碼......讓別人貢獻......它只會擴展學習...... – Orangepill