第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何避免在 Symfony Messenger 中處理來自“子”類的消息?

如何避免在 Symfony Messenger 中處理來自“子”類的消息?

PHP
慕雪6442864 2023-04-28 13:56:22
我想我在文檔中遺漏了一些東西,但問題很簡單。假設(shè)我有一條消息 classMessageOne和MessageTwoextends MessageOne。我也有MessageOneHandler應(yīng)該處理的MessageOne:__invoke(MessageOne $messageOne)哪個MessageTwoHandler應(yīng)該只處理MessageTwo:__invoke(MessageTwo $messageTwo)問題是什么時候派遣它由和MessageTwo處理。是的,由于繼承,它是完全明智的,并且一切在邏輯上都是正確的,但是有什么“symfony”方法可以防止這種情況發(fā)生嗎?MessageHandlerOneMessageHandlerTwo當然,我可以通過修改這些類的繼承來解決這個問題,但是有沒有更好的方法呢?此外debug:messenger按預(yù)期顯示一切,每個消息類一個處理程序,沒有繼承問題。
查看完整描述

1 回答

?
侃侃無極

TA貢獻2051條經(jīng)驗 獲得超10個贊

繼承很少是適合消息的上帝。

如果MessageTwo extends MessageOne,則$messageTwo instanceof MessageOne返回 true,就這么簡單。

此外,消息應(yīng)該非常簡單和輕量級,因此代碼重復(fù)通常不應(yīng)該是一個問題。但是如果出于某種原因你確實需要在消息類之間重用一些代碼,你有幾個選擇:

  • 您可以使處理短路,以便如果get_class($message) !== MessageOne::class然后處理程序可以不做任何工作就返回……但我個人認為這將是一個脆弱的設(shè)計。

更好的選擇是簡單地為您的消息重新設(shè)計繼承模型。

  • MessageOne和之間的共享邏輯MessageTwo可以移至父級AbstractMessage,兩者都繼承。處理程序會正確地類型提示具體的消息類型,并且不會有混淆。

  • 根據(jù)您要進行的代碼重用類型,您可以將共享代碼移動到Trait具有靜態(tài)方法的 a 或 helper 類。如果這些中的任何一個有任何好處,將完全取決于您的應(yīng)用程序的具體情況,最終將是一個見仁見智的問題。


查看完整回答
反對 回復(fù) 2023-04-28
  • 1 回答
  • 0 關(guān)注
  • 111 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號