ここにあります a Rubyミドルウェアパターンを実装するpoject。記述から、パターンが何であるか、それが何に役立つのか、および他のソリューションがなぜ機能しないのかわかりません。 tも動作します。
ミドルウェアのパターンとは何ですか?その長所と短所は何ですか?
リンクしたプロジェクトの作成者は、ミドルウェアをWindows Communication Foundationに似たビジネスロジックの「状態エンジン」として説明しています。それは ミドルウェアの通常の定義 (2つ以上の異種アプリケーションを結合するソフトウェア)ではなく、「ミドルウェアパターン」は実際にはそうではないと思います。
著者は彼の用語で少し速くて緩い演奏をしていると思います。
もちろん、この質問が投稿されて以来、ミドルウェアという用語はかなり変わっています(ほぼ5年前に私がこれを書いている時点)。
最近出版された本を読んでいる間、 Building Microservices With ASP.NET Core(by Kevin Hoffman) この用語に出くわし、それについてもっと知りたいと思いました。
これにより、 Microsoftサイト に移動します。これにより、次のように定義されます。
ミドルウェアとは
ミドルウェアは、リクエストとレスポンスを処理するためにアプリケーションパイプラインに組み込まれるソフトウェアです。各コンポーネント:
- パイプラインの次のコンポーネントにリクエストを渡すかどうかを選択します。
- パイプラインの次のコンポーネントが呼び出される前後に作業を実行できます。
ミドルウェアパターンは、マイクロサービスシステムでのメッセージルーティングの処理方法を説明する方法としてよく使用されます。どのマイクロサービスが着信メッセージを受信するかを決定する中央コントローラーとしてやや。このように、メッセージのルーティングを処理するのは「ミドルウェアコンポーネント」です。
この例からわかることを基にすると、基本的に、特定の初期状態で定義された方法でチェーンされているアクション前フックとアクション後フックの任意のセット(したがって、通過するスタックを構築します)を許可します。入力(この場合はnil
ですが、そのようにする必要はありません)。
それらの動機は、任意の方法で要求/応答プロパティを変更する可能性があるHTTP要求のコンテキストにあるようです。このパターンが一般的な意味で過度に有用であるとは思いません(「ミドルウェア」と呼ぶのは間違いなく流用です)。
利点は、懸念の分離であるように見えます。入力に操作をフックおよびチェーンするための一般化されたシステムを何かで処理します。このサービスへのサブスクリプションは、他のコンテキストに簡単にデプロイして、一連の操作に直接プラグインできます。静的に行われている限り、チェーンに特定の操作を挿入した場合の副作用を簡単に推測することもできます。
私にとっての不利な点は、コンテキストが完全に削除されることです。強力な命名規則なしで何を操作しているか、またはコンテキストを理解しないとサブスクライバーへの変更の影響が何であるかが明確ではありません。両側から理解できるようにするには、呼び出し規約とそれが行うことの両方を命名規則に入れる必要があります。
私にとっては、オペレーション全体をコンセプトとして表現した方がいいと感じています。例えばすべてのプロパティを1つの場所に設定します。アプリケーションの一部でプロパティを注入する必要があるのではないかと思います。たとえば、HTTPリクエストのコンテキストで、XMLを出力しているときに応答タイプをXMLに変更するものがある場合など、もっと興味深い使い方です。
ただし、これを設定する方法では、それが応答タイプを設定する唯一のスポット、特定の要求に対応する唯一のもの、またはそれより前に来たものを上書きする最後の1つだけであることを確認する必要があります。そうしないと、問題が発生します。
この方法で問題を解決するのが説得力のあるパターンであるかどうかはわかりませんが、30分間見て考えたのではないかと思います。誰かがそれ以上の時間をかけて作ったと思うので、見落としがあるかもしれません。
私は最初にnode.js接続のミドルウェア「パターン」に出会い、後者はプロジェクトを表現します。これは、非同期コードを記述する明確でシンプルな方法であり、コールバックが「フレームワーク」APIにスロットされ、それぞれが期待されますそれ自体は、ルーチンが戻るときに実行されるコールバックパラメータを受け入れます。 HTTPサーバーアプリケーションフレームワークである接続のコンテキストでは、チェーンされたコールバックを使用して、要求サイクルとアプリケーションロジックのすべての部分を実装またはアクセスできます。したがって、このコンテキストでは、ミドルウェアは、事前定義されたAPIを介してサービスを提供する自己完結型のコード単位です。これは、認証と承認、ファイルアップロードの解析の要求、XSLT変換によるビューデータの調整などです。以前の回答で説明したように、これは従来の用語のメタファーに従うと思います。