我是Laravel的新手,也是我的第一个项目。直到现在我都喜欢Laravel提供的所有东西。
从Laracast开始,我开始了解关于他的LaraBook系列中的jeffrey跟随的Command Bus模式,所以我决定使用它。直到现在它还不错,但现在我处于需要解决的状况。 https://github.com/laracasts/Commander
基本上我需要创建一个订阅者(表单是相同的),其实际上包含许多操作。
我不认为这些是我应该通过事件管理的事情。这些都构成了添加订阅者的过程。小号
我第一步陷入困境,我是否在CommandObject的构造函数中定义了这么多参数?
进一步在我的CommandHalnder中,我应该完成所有这些子任务吗?在命令总线模式之后接近这个的首选方法是什么?
答案 0 :(得分:2)
我认为您不必害怕使用多个事件。例如:创建一个事件侦听器,侦听创建“公司”时触发的事件。该事件侦听器应该触发CreateCompanyAdmin命令。您只需要确保在处理事件的地方注入正确的装饰命令总线。
还创建一个侦听器,侦听创建管理员时触发的事件。该事件监听器反过来应该创建并触发一个命令,为该管理员设置管理员角色。不要害怕从事件监听器重用命令模式。
就像这样,当现有管理员向现有公司添加额外的新管理员时,您可以重复使用CreateCompanyAdmin命令。
希望这有帮助。
答案 1 :(得分:1)
我认为这些是三个独立的行动,应该在三个不同的地方处理。换句话说,为同一事件创建三个侦听器,每个侦听器处理您列出的步骤之一。
至于将许多参数传递给CommandObject构造函数,这样的事情通常表明您需要将逻辑分解为更小的块。
为什么不为列出的每个操作创建三个单独的命令,而不是执行所有操作的单个命令对象?你应该让你的课程尽可能简单(单一责任原则和所有这些),我想这也应该适用于命令对象。
我理解你对他们的看法是同一个行动的所有部分 - 添加订阅者的过程 - 但是如果这个过程发生变化并且你需要额外的步骤,或者需要删除现有的步骤,将来会怎样?您必须更改整个逻辑,而不是简单地添加或删除几行(创建命令对象并执行它)。