在Laravel 5中,命令和事件有什么区别?

彼得·福克斯

所以Laravel 5终于在昨天发布了命令总线的最终实现,但是我在徘徊,与以前版本中的事件机制相比,使用命令总线的真正区别是什么?

好的,我知道可以将其用于从Request对象创建命令的原因,这非常有用,但除此之外,它的行为方式似乎甚至到事件的整个排队功能都类似。

您能否提供用例的示例以及两者的优缺点在哪里?

劳伦斯
  • 命令是即将发生的事情。即“ CreateUser”
  • 事件是目前刚刚发生的事情-即“ UserSuccessfullyCreated”

差异似乎很小-但有一些关键差异。

  • 必须专门调用/调度命令。即,如果您想执行CommandX,则必须在某个地方调用CommandX。
  • 事件响应应用程序中任何地方触发的事件很棒的事情是多个事件处理类可以响应同一事件

让我们举个例子来最好地说明它。假设我们创建了一个用户,并希望向他们发送欢迎电子邮件,并更新我们的新闻通讯列表。

在命令场景中会做

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

laravel 5中的Models和Repository有什么区别?

Laravel中的updateOrCreate()和updateOrInsert()有什么区别

laravel 中的 phpredis 和 predis 有什么区别?

{{}}和{!!有什么区别?!!}在laravel刀片文件中?

laravel刀片文件中的{{}}和{{{}}}有什么区别?

laravel中的list和select之间有什么区别

在Laravel工厂中,“ state”和“ defineAs”有什么区别?

Laravel中的Job,Queue和Worker有什么区别?

Laravel 5.7中的auth和access有什么区别?

laravel 中的 Request 和 LoginRequest 有什么区别

Laravel 中的块和分页有什么区别?

Laravel 迁移中的 Text 和 LongText 有什么区别?

laravel和lumen有什么区别

Laravel 5链接中的简单文本和带有刀片语法的链接之间有什么区别?

Laravel 5-创建和创建模型事件有什么区别?

laravel光标和laravel块方法有什么区别?

在Laravel中,使用User和有什么区别?和/用户

Laravel中的Contract和PHP中的Interface有什么区别?

json资源和资源集合有什么区别?在Laravel

Laravel-timestamp()和timestampTz()有什么区别?

Laravel Faker-create和make有什么区别

Laravel的@yield和@include有什么区别?

laravel master和5.0有什么区别?

Laravel Mix:scripts()和Combine()有什么区别?

laravel 刀片组件和 vue 组件有什么区别?

Laravel中的withTest1($ a)和compact($ a)有什么区别?

Laravel(7或更高版本)中的身份验证和授权有什么区别?

JsonResource和ResourceCollection有什么区别?在Laravel v6或v7中

Laravel 中的模型->名称和模型()之间有什么区别?