所以Laravel 5终于在昨天发布了命令总线的最终实现,但是我在徘徊,与以前版本中的事件机制相比,使用命令总线的真正区别是什么?
好的,我知道可以将其用于从Request对象创建命令的原因,这非常有用,但除此之外,它的行为方式似乎甚至到事件的整个排队功能都类似。
您能否提供用例的示例以及两者的优缺点在哪里?
差异似乎很小-但有一些关键差异。
让我们举个例子来最好地说明它。假设我们创建了一个用户,并希望向他们发送欢迎电子邮件,并更新我们的新闻通讯列表。
在命令场景中会做
AdminController {
function create() {
Bus::dispatch(new CreateUser(Auth::user());
}
}
然后在我们的CommandClass中-我们会做
public function handle(CreateUser $auth)
{
// 1. Create the user here
// 2. Send welcome email
// 3. Update our newsletter
}
但是,如果我们使用事件-我们将在CommandClass中执行类似的操作
public function handle(CreateUser $auth)
{
// 1. Create the user here
Event::fire(new UserWasCreated($user));
}
那么我们可以创建想要监听的事件数量并做一些事情:
EventClassA
Event::listen('UserWasCreated', function($event)
{
// 2. Send welcome email
});
EventClassB
Event::listen('UserWasCreated', function($event)
{
// 3. Update our newsletter
});
伟大的事情是分离关注点。现在,命令“ createuser”无需担心创建用户后会发生什么。它只需要CreateUser即可。
另外-如果我们要在用户注册后添加其他功能-说在乐透抽奖中输入这些功能-您只需添加另一个事件类并添加新的事件侦听器即可。
EventClassC
Event::listen('UserWasCreated', function($event)
{
// 4. Register them in lotto
});
注意,我们根本不需要触摸命令CreateUser类代码吗?这提供了OOP风格方法中类的真正分离问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句