laravel框架中的管道設計模式就是資料傳到管道中被處理,然後再傳遞到下一步,接下來我們就來看看laravel框架中管道設計模式中間件的基本運作原理。
所謂管道(Pipeline)設計模式就是將會資料傳遞到一個任務序列中,管道扮演者管線的角色,資料在這裡被處理然後傳遞到下一個步驟。
使用管道使用很多好處的,尤其是在單一任務中編寫複雜處理程式碼時管道為我們提供了極大的便利,而且可以在管道中輕鬆添加、移除或替換階段任務。
Laravel在框架中的許多地方用到了 Pipeline 設計模式,這意味著所有我們需要實現管道設計模式的地方已然是應用底層的一部分了。
我們可以使用 Laravel的內部元件在框架頂層建立自己的功能。今天的教學我們將討論管道設計模式以及如何使用 Laravel 的內部管道。
什麼是管線設計模式?
管道模式用於將複雜的進程分解成多個獨立的子任務。每個獨立的任務都是可重複使用的,因此這些任務可以被組合成複雜的進程。
這個模式允許你講龐大的進程分解成更小的子任務,這些子任務將資料處理並將處理後的結果傳遞給下一個子任務。就像流水線一樣,有條不紊,從原料加工到成品,實現一道完整的工序。
管道中的每一個任務都會接受並傳回相同類型的數據,這樣子任務可以在管道中被添加、移除或替換,而不影響其它子任務。
如果你熟悉Unix 系統的話,你可能對管道並不陌生,因為在shell 命令中我們經常會使用管道命令,例如:
cat helloworld.txt | grep "hello world" | rev | > output.txt
在這個例子中,我們讀取文件內容,並在其中查詢字串“hello world”,反轉字串,並最終將其添加到output.txt 檔案中。
Laravel中如何使用管道模式?
Laravel 在框架中的許多地方使用了管道設計模式,最常見的就是中間件的實作。
當請求最終到達控制器動作被處理前,會先經過一系列的中間件。每個中間價都有一個獨立的職責,例如,設定 Cookie、判斷是否登入以及阻止 CSRF 攻擊等等。
每個階段都會對請求進行處理,如果請求通過就會被傳遞給下一個處理,不通過就會傳回對應的 HTTP 回應。
這個機制使得我們很容易在請求最終到達應用程式碼前新增處理操作,當然如果不需要這個處理操作你也可以隨時移除而不影響請求的生命週期。
管道模式的優點
管道模式有許多優點:
#首先,將複雜的處理流程分解成獨立的子任務,從而方便測試每個子任務;
其次,被分解的子任務可以被不同的處理程序重複使用,避免程式碼冗餘。
最後,在複雜進程中新增、移除和取代子任務非常輕鬆,對已存在的進程沒有任何影響。
管道模式的缺點
當然,管道模式也有缺點:
雖然每個子任務變得簡單了,但是當你再次嘗試將這些子任務組合成完整進程時有一定複雜性;
此外你還需要保證獨立子任務測試通過後整體的流程能正常運作,這有一定的不確定性。
最後,當你看到的都是一個個子任務時,對理解整體流程帶來困難(盲人摸象的故事想必大家很熟悉,正是此理)。
如何使用Laravel的管道
使用Laravel 提供的管道很簡單,首先需要建立一個新的Illuminate\Pipeline\Pipeline 對象,並將其註入到某個Illuminate\Contracts\Container\Container 的實例:
$pipeline = app('Illuminate\Pipeline\Pipeline');
接下來將你想要傳遞的物件傳送這個管道:
$pipeline->send($request);
然後將其傳遞到接受並處理請求的任務數組:
$pipeline->through($middleware);
最後執行管道任務並編寫回呼處理:
$pipeline->then(function ($request) { // Do something });
這就是中間件的基本工作原理:接收HTTP 請求,讓請求經過定義好的路由中間件,最後到達目的地進行處理。
結論
管道設計模式很有用,中間件只是一個特別的例子,Laravel 在框架底層中充分利用了該設計模式,當然你也可以在自己的專案中使用Laravel 提供的管道。
以上就是本篇文章的全部內容了,更多請關注laravel教學!
相關文章推薦:
laravel環境搭建:laravel如何部署到阿里雲或騰訊雲步驟
相關課程推薦:
#以上是Laravel框架中管道設計模式中間件的基本工作原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!