Php 具有简单依赖项注入和解耦的事件处理
我正在为教育目的开发一个MVC框架。现在,我一直在思考如何处理框架中的事件 我一直在寻找的最接近的答案是,但它没有说任何关于注射部分的内容 我的问题是,这两种方法都足够好吗?它们是解耦的吗 该语言是PHP,但将其视为伪代码 第一个例子是C#方法Php 具有简单依赖项注入和解耦的事件处理,php,events,dependency-injection,event-handling,Php,Events,Dependency Injection,Event Handling,我正在为教育目的开发一个MVC框架。现在,我一直在思考如何处理框架中的事件 我一直在寻找的最接近的答案是,但它没有说任何关于注射部分的内容 我的问题是,这两种方法都足够好吗?它们是解耦的吗 该语言是PHP,但将其视为伪代码 第一个例子是C#方法ClassA注入了内核类,它自己负责订阅事件 class Kernel{ public $onInit = new EventHandler(); public $onTerminate = new EventHandler();
ClassA
注入了内核
类,它自己负责订阅事件
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的实现产生了依赖性,这种依赖性并不明显,而且很难扩展或替换 我认为第二种方法更好,因为第一种方法创建了对EventHandler实现的依赖性,这种依赖性并不明显,而且很难扩展或替换 第二次进近时也为+1。第一种方法在EventHandler上创建未发布的依赖项。。。这个框架是面向大众还是面向私人观众?现在我的框架的主要目标是学习新东西(我学到了很多;设计模式、依赖注入等等)。我想让它开源,但这取决于我对结果(代码)的满意程度。谢谢你的投入。让它开源。。。让别人贡献。。。这只会扩展学习…我可能会这样做,因为很难找到遵循良好编程习惯的简单php框架。如果你决定,请在这里发布详细信息。。。你引起了我的兴趣。第二种方法也是+1。第一种方法在EventHandler上创建未发布的依赖项。。。这个框架是面向大众还是面向私人观众?现在我的框架的主要目标是学习新东西(我学到了很多;设计模式、依赖注入等等)。我想让它开源,但这取决于我对结果(代码)的满意程度。谢谢你的投入。让它开源。。。让别人贡献。。。这只会扩展学习…我可能会这样做,因为很难找到遵循良好编程习惯的简单php框架。如果你决定,请在这里发布详细信息。。。你引起了我的兴趣。