复杂命令的命令总线模式

时间:2014-10-11 11:50:57

标签: laravel laravel-4

我是Laravel的新手,也是我的第一个项目。直到现在我都喜欢Laravel提供的所有东西。

从Laracast开始,我开始了解关于他的LaraBook系列中的jeffrey跟随的Command Bus模式,所以我决定使用它。直到现在它还不错,但现在我处于需要解决的状况。 https://github.com/laracasts/Commander

基本上我需要创建一个订阅者(表单是相同的),其实际上包含许多操作。

  1. 创建公司
  2. 创建管理员用户
  3. 为管理员用户分配一些其他内容(如州,角色)..
  4. 我不认为这些是我应该通过事件管理的事情。这些都构成了添加订阅者的过程。小号

    我第一步陷入困境,我是否在CommandObject的构造函数中定义了这么多参数?

    进一步在我的CommandHalnder中,我应该完成所有这些子任务吗?在命令总线模式之后接近这个的首选方法是什么?

2 个答案:

答案 0 :(得分:2)

我认为您不必害怕使用多个事件。例如:创建一个事件侦听器,侦听创建“公司”时触发的事件。该事件侦听器应该触发CreateCompanyAdmin命令。您只需要确保在处理事件的地方注入正确的装饰命令总线。

还创建一个侦听器,侦听创建管理员时触发的事件。该事件监听器反过来应该创建并触发一个命令,为该管理员设置管理员角色。不要害怕从事件监听器重用命令模式。

就像这样,当现有管理员向现有公司添加额外的新管理员时,您可以重复使用CreateCompanyAdmin命令。

希望这有帮助。

答案 1 :(得分:1)

我认为这些是三个独立的行动,应该在三个不同的地方处理。换句话说,为同一事件创建三个侦听器,每个侦听器处理您列出的步骤之一。

至于将许多参数传递给CommandObject构造函数,这样的事情通常表明您需要将逻辑分解为更小的块。

为什么不为列出的每个操作创建三个单独的命令,而不是执行所有操作的单个命令对象?你应该让你的课程尽可能简单(单一责任原则和所有这些),我想这也应该适用于命令对象。

我理解你对他们的看法是同一个行动的所有部分 - 添加订阅者的过程 - 但是如果这个过程发生变化并且你需要额外的步骤,或者需要删除现有的步骤,将来会怎样?您必须更改整个逻辑,而不是简单地添加或删除几行(创建命令对象并执行它)。