いわゆるパイプライン設計パターンは、データをタスク シーケンスに渡し、データが処理されて次のステップに渡される組立ラインの役割を果たします。
パイプラインを使用すると、特に単一タスクで複雑な処理コードを作成する場合に多くの利点があり、パイプライン内でステージ タスクを簡単に追加、削除、置換できます。
Laravel はフレームワーク内の多くの場所でパイプライン設計パターンを使用します。これは、パイプライン設計パターンを実装する必要があるすべての場所がすでに基礎となるアプリケーションの一部であることを意味します。
Laravel の内部コンポーネントを使用して、フレームワーク上に独自の機能を構築できます。今日のチュートリアルでは、パイプラインの設計パターンと、Laravel の内部パイプラインの使用方法について説明します。
パイプライン設計パターンとは何ですか?
このモードでは、巨大なプロセスを小さなサブタスクに分割し、データを処理し、処理された結果を次のサブタスクに渡すことができます。まるで組み立てラインのように、原料の加工から完成品までが整然と完成しています。
パイプライン内の各タスクは同じタイプのデータを受け入れて返すため、他のサブタスクに影響を与えることなく、パイプライン内でサブタスクを追加、削除、または置換できます。
Unix システムに精通している場合は、次のようなシェル コマンドでパイプ コマンドをよく使用するため、パイプについてもよく知っているかもしれません。
cat helloworld.txt | grep "hello world" | rev | > output.txt
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});
結論
パイプライン設計パターンは非常に便利です。Laravel はこの設計パターンを基礎となるフレームワークで最大限に活用します。もちろん、独自のプロジェクトで使用することもできます。
免責事項: この記事は英語の翻訳です、原文は: How to use the Pipeline Design Pattern inララベル