ホームページ >バックエンド開発 >PHPチュートリアル >Laravel でのパイプライン設計パターンの使用 -- ミドルウェア実装原理の探求

Laravel でのパイプライン設計パターンの使用 -- ミドルウェア実装原理の探求

WBOY
WBOYオリジナル
2016-06-23 13:18:231046ブラウズ

いわゆるパイプライン設計パターンは、データをタスク シーケンスに渡し、データが処理されて次のステップに渡される組立ラインの役割を果たします。

パイプラインを使用すると、特に単一タスクで複雑な処理コードを作成する場合に多くの利点があり、パイプライン内でステージ タスクを簡単に追加、削除、置換できます。

Laravel はフレームワーク内の多くの場所でパイプライン設計パターンを使用します。これは、パイプライン設計パターンを実装する必要があるすべての場所がすでに基礎となるアプリケーションの一部であることを意味します。

Laravel の内部コンポーネントを使用して、フレームワーク上に独自の機能を構築できます。今日のチュートリアルでは、パイプラインの設計パターンと、Laravel の内部パイプラインの使用方法について説明します。

パイプライン設計パターンとは何ですか?

パイプライン パターンは、複雑なプロセスを複数の独立したサブタスクに分割するために使用されます。それぞれの独立したタスクは再利用可能なため、これらのタスクを複雑なプロセスに組み合わせることができます。

このモードでは、巨大なプロセスを小さなサブタスクに分割し、データを処理し、処理された結果を次のサブタスクに渡すことができます。まるで組み立てラインのように、原料の加工から完成品までが整然と完成しています。

パイプライン内の各タスクは同じタイプのデータを受け入れて返すため、他のサブタスクに影響を与えることなく、パイプライン内でサブタスクを追加、削除、または置換できます。

Unix システムに精通している場合は、次のようなシェル コマンドでパイプ コマンドをよく使用するため、パイプについてもよく知っているかもしれません。

cat helloworld.txt | grep "hello world" | rev | > output.txt

この例では、ファイルのコンテンツを読み取り、その中の文字をクエリします。 String " hello world」を入力し、文字列を反転して、最後にoutput.txtファイルに追加します。

Laravel でパイプライン モードを使用するには?

Laravel はフレームワーク内の多くの場所でパイプライン設計パターンを使用します。最も一般的なのはミドルウェアの実装です。

リクエストが最終的にコントローラーのアクションに到達して処理されると、最初に一連のミドルウェアを通過します。各仲介者は、Cookie の設定、ログインするかどうかの決定、CSRF 攻撃の防止など、独立した責任を負います。

リクエストは各段階で処理され、リクエストが成功した場合は次の処理に渡され、失敗した場合は対応する HTTP レスポンスが返されます。

このメカニズムにより、リクエストが最終的にアプリケーション コードに到達する前に、処理オペレーションを簡単に追加できます。もちろん、この処理オペレーションが必要ない場合は、リクエストのライフサイクルに影響を与えることなく、いつでも削除することもできます。

パイプライン モードの利点

パイプライン モードには多くの利点があります:

まず、複雑な処理フローを独立したサブタスクに分解して、各サブタスクのテストを容易にします

次に、分解されたサブタスクを異なるハンドル プロセスで使用できます。コードの冗長性を避けるために再利用します。

最後に、既存のプロセスに影響を与えることなく、複雑なプロセスのサブタスクを追加、削除、置換することが非常に簡単です。

パイプライン モードの欠点

もちろん、パイプライン モードにも欠点があります。

各サブタスクは単純になりますが、これらのサブタスクを完全なプロセスに結合しようとすると、ある程度の複雑さが生じます。さらに、独立したサブタスクのテストに合格した後、プロセス全体が正常に動作することを確認する必要もありますが、これにはある程度の不確実性があります。

最後に、サブタスクだけが表示されると、全体のプロセスを理解することが難しくなります (視覚障害者が象に触れる話は誰にとってもよく知られているはずです。これが理由です)。

Laravel のパイプラインの使用方法

Laravel が提供するパイプラインの使用は非常に簡単です。まず、新しい IlluminatePipelinePipeline オブジェクトを作成し、それを IlluminateContractsContainerContainer のインスタンスに挿入する必要があります。

$pipeline = app('Illuminate\Pipeline\Pipeline');

次に、渡したいオブジェクトを送信します。このパイプライン:

$pipeline->send($request);

次に、それをリクエストを受け入れて処理するタスクの配列に渡します:

$pipeline->through($middleware);

最後にパイプライン タスクを実行し、コールバック ハンドラーを書き込みます:

$pipeline->then(function ($request) {    // Do something});

これは基本的にミドルウェアの動作方法です。HTTP リクエストを受信し、リクエストの通過 定義されたルーティングミドルウェアが最終的に処理の宛先に到達します。

結論

パイプライン設計パターンは非常に便利です。Laravel はこの設計パターンを基礎となるフレームワークで最大限に活用します。もちろん、独自のプロジェクトで使用することもできます。

フレームワークに依存しないパイプラインを使用したい場合は、この Github プロジェクトを参照してください: LeaguePipeline

免責事項: この記事は英語の翻訳です、原文は: How to use the Pipeline Design Pattern inララベル

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。