回答
我不推薦在控制器和存儲庫之間使用事件。這使您的存儲庫與您的應用程序緊密耦合。
取而代之的是在控制器內部以及事件處理程序中觸發您的事件,以處理存儲庫和其他業務邏輯單元。這樣你就不必在你的(或任何)存儲庫中聲明任何事件監聽器/處理器。
EDIT
活動旨在被用作無狀態的過程。
無國籍意味着沒有以前的交互的記錄,每一交互請求已被處理完全基於其附帶的信息 - source
所以最好的做法是,你內火的事件您的控制器,但前提是您不希望從端點接收任何回調(如果是這樣的話,您可以在控制器中與所需的存儲庫進行交互)。
例處理您的控制器內的用戶註冊後(在那裏你解決一個或多個或無庫),你火事件UserRegistered。現在在您的處理程序中,您會收到用戶對象,並使用裏面的信息發送帶有歡迎消息的電子郵件。再次,您可以在處理程序中使用無,一個或多個庫。您甚至可以發起另一個事件,但是無法將任何信息傳遞迴事件發起點。
現在一些圖書館有內部'巴士',您可以在此連接並收聽信息。您可以將這些用於域事件並創建您自己的偵聽器。你也可以在你自己的庫中複製這個場景,如果你想爲其他開發者(你自己的lib之外的)設置鉤子的話。
這很有道理。但在某些情況下,我看不到其他可能性。例如,從控制器我調用一個回購的方法。該方法遍歷模型集合,並通過某些條件更改模型的狀態並觸發事件ModelUpdatedEvent。這是否意味着架構錯了?或者你會怎麼做這種情況? – stakantin
我理解正確嗎?你的意見是僅在控制器中觸發事件? – stakantin
@stakantin我編輯了我的答案澄清 – VikingCode
它完全取決於你的用例。您可以從控制器或模型/存儲庫中觸發事件。
根據你的問題,我描述了兩個方案:
事件根據用戶操作:
如果事件與用戶操作。你可以從你的控制器中啓動它。
例子:
比方說,你正在構建一個物流管理項目。訂單發貨後,您可以觸發
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自身火節省事件,在其換代車型。看看代碼事件here。
編輯:
所以,不要只是在尋找一個觸發事件的地方。尋找行動,用例和場景來觸發事件。通常事件會增加代碼的可重用性。
我知道我可以從任何地方開火。我正在尋找很好的理由,對於某個特定地方的優點和缺點。 – stakantin
我想說的是,不要去那個地方開火。使用案例和行動後。它會給你很好的建築。但要確保它不會無限循環。 –
- 1. 在laravel 5中寫入代碼的最佳做法是什麼?*
- 2. 什麼是生成站點地圖的最佳方式
- 3. 在PHP Laravel 5中配置路由限制的最佳方式是什麼?
- 4. 在laravel 5中配置測試環境的最佳方式是什麼?
- 5. 的最佳方式 - Laravel 5
- 6. 在JavaScript中添加事件的最佳方式是什麼?
- 7. 在ASP.NET中訂閱事件的最佳方式是什麼?
- 8. 在TestCafe中等待'WebComponentsReady'事件的最佳方式是什麼?
- 9. 什麼是尋找軟件開發會議列表的最佳地點?
- 10. 在JavaScript中切換點擊事件的最佳方式是什麼?
- 11. 在C#中生成KML文件的最佳方式是什麼?
- 12. 創新Laravel 5中的「設置」模型的最佳實踐是什麼?
- 13. 在Google地圖上繪製點的最佳方式是什麼?
- 14. 在Java中開發遊戲的最佳軟件包是什麼?
- 15. Laravel 5環境總是'生產'當它是事實'當地'
- 16. 跟蹤Google Analytics中的點擊事件的最佳方式是什麼?
- 17. 在Laravel 5.1中顯示菜單的最佳方式是什麼?
- 18. 在laravel中執行此查詢的最佳方式是什麼?
- 19. 什麼是您在生產中發生的最糟糕的數據庫事故?
- 20. 什麼是存儲我的數據的最佳地點?
- 21. 乾淨地emogrify Laravel刀片模板文件的最佳方法是什麼?
- 22. 什麼是登錄按鈕的最佳地點?
- 23. 什麼是開始學習Qt的最佳地點?
- 24. 在檢查點之後寫入的事件會發生什麼?
- 25. 用Xcode和Objective-C基礎學習Iphone開發的最佳地點是什麼?
- 26. 分享點的最佳分佈式開發方法是什麼
- 27. 在C#中做事情的最佳方式是什麼?
- 28. 在線發佈/ doc文件夾的最佳做法是什麼
- 29. Laravel 5 Blade - 在foreach中發生奇怪
- 30. 在java中爲neo4j節點生成juuid的最佳方法是什麼
您的評論與此無關。請更具體一些。 – stakantin