Laravel 5 在拉雷维尔5号举行活动的最佳地点是什么

Laravel 5 在拉雷维尔5号举行活动的最佳地点是什么,laravel-5,Laravel 5,这实际上是一个一般性的问题,不一定与拉威尔有关 我在考虑控制器和存储库之间的关系。或者有更好的地方?利与弊是什么?你的想法是什么 谢谢 我不建议在控制器和存储库之间使用事件。这使您的存储库与应用程序紧密耦合 相反,只需在控制器和事件处理程序中触发事件,即可寻址存储库和其他业务逻辑单元。这样,您就不必在(或任何)存储库中声明任何事件侦听器/处理程序 编辑 事件将用作无状态进程 无状态意味着没有以前交互的记录,每个交互请求都必须完全基于其附带的信息进行处理- 因此,最好的做法是在控制器内部触发事件,

这实际上是一个一般性的问题,不一定与拉威尔有关

我在考虑控制器和存储库之间的关系。或者有更好的地方?利与弊是什么?你的想法是什么


谢谢

我不建议在控制器和存储库之间使用事件。这使您的存储库与应用程序紧密耦合

相反,只需在控制器和事件处理程序中触发事件,即可寻址存储库和其他业务逻辑单元。这样,您就不必在(或任何)存储库中声明任何事件侦听器/处理程序

编辑

事件将用作无状态进程

无状态意味着没有以前交互的记录,每个交互请求都必须完全基于其附带的信息进行处理-

因此,最好的做法是在控制器内部触发事件,但前提是您不希望端点有任何回调(如果是这样,则与控制器中所需的存储库进行交互)

示例在控制器内处理用户注册后(在其中处理一个或多个或无存储库),触发事件UserRegistered。现在,在处理程序中,您将接收用户对象,并使用其中的信息发送一封包含欢迎消息的电子邮件。同样,您可以在处理程序中不使用、使用一个或多个库。您甚至可以触发另一个事件,但无法将任何信息传递回事件的启动点


现在有些图书馆有内部“总线”,你可以在那里连接和收听信息。您可以将这些用于域事件并创建自己的侦听器。如果你想在你自己的库中为其他开发者(你自己的库之外)设置钩子,你也可以在你自己的库中复制这个场景。

这完全取决于你的用例。您可以从控制器或模型/存储库触发事件

根据你的问题,我描述了两种情况:

  • 基于用户操作的事件:

    如果您的事件与用户操作相关。你可以从你的控制器发射它

    示例:

    假设您正在构建一个物流管理项目。订单发货后,您可以触发
    OrderShipped
    事件

    namespace App\Http\Controllers;
    
    use App\Order;
    use App\Events\OrderShipped;
    use App\Http\Controllers\Controller;
    
    class OrderController extends Controller
    {
         /**
         * Ship the given order.
         *
         * @param  int  $orderId
         * @return Response
         */
         public function ship($orderId)
         {
             $order = Order::findOrFail($orderId);
    
             // Order shipment logic...
    
             event(new OrderShipped($order));
         }
    }
    
  • 基于代码操作的事件:

    如果代码中有操作。你可以从那里触发事件

    示例:

    Laravel本身会在其模型中触发一个保存、更新事件。看看代码事件

  • 编辑:


    所以,不要找一个地方点燃一个事件。寻找触发事件的操作、用例和场景。通常,事件会增加代码的可重用性。

    您的评论毫无意义。请说得更具体些,这是有道理的。但在某些情况下,我看不到其他可能性。例如,我从控制器调用repo的一个方法。该方法遍历一组模型,并在某种情况下更改模型的状态,并触发事件ModelUpdateEvent。这是否意味着架构是错误的?或者在这种情况下你会怎么做?我对你的理解正确吗?您的意见是只在控制器中触发事件?我知道我可以从任何地方触发事件。我在寻找一个好的理由,一个特定的地方的利弊。我想说的是,不要去追求一个地方去炒掉它。关注用例和操作。它将为您提供良好的体系结构。但要确保它不会进入无限循环。