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