検索ガイド -Search Guide-

単語と単語を空白で区切ることで AND 検索になります。
例: python デコレータ ('python' と 'デコレータ' 両方を含む記事を検索します)
単語の前に '-' を付けることで NOT 検索になります。
例: python -デコレータ ('python' は含むが 'デコレータ' は含まない記事を検索します)
" (ダブルクオート) で語句を囲むことで 完全一致検索になります。
例: "python data" 実装 ('python data' と '実装' 両方を含む記事を検索します。'python data 実装' の検索とは異なります。)
当サイトのドメイン名は " getwebtips.net " です。
トップレベルドメインは .net であり、他の .com / .shop といったトップレベルドメインのサイトとは一切関係ありません。
practical_python_design_patterns

Practical Python Design Patterns - Python で学ぶデザインパターン: The Chain of Responsibility Pattern - Part. 6 「ダメ押し確認」の巻 投稿一覧へ戻る

Published 2022年6月17日19:43 by T.Tsuyoshi

SUPPORT UKRAINE

- Your indifference to the act of cruelty can thrive rogue nations like Russia -

Parting Shots
(ダメ押し確認)

この章を通してみてきたように、the Chain of Responsibility パターンでは、「機能チェーン」を構成するそれぞれのオブジェクト間で受け渡されるリクエストオブジェクトが中心的な役割を担っています。ですから、このリクエストオブジェクトの作成や変更時には十分な注意を払う必要があります。
また、the Chain of Responsibility パターンを採用することでプログラム実行時におけるハンドラーの入れ替えやシャッフルが可能となりますから、これを利用してチェーン全体のパフォーマンスを向上させることも可能となります。例えば前回の呼び出し時に使用されたハンドラーをチェーンの先頭に配置するようにすれば、より頻繁に使用されるハンドラーはチェーンの先頭付近に、使用頻度の低いハンドラーはチェーンの後半部分に並ぶようになるでしょう (ただしこの方法を採用できるのは、ハンドラーの実行順序を考慮しなくても済む場合のみです)。
しかし、ハンドラーの実行順序を考慮する必要がある場合であっても、このシリーズで学習したいくつかのアイデアを利用することでパフォーマンスを向上させることができる余地があります。例えば、特定のハンドラーに対するリクエストの処理結果についてはキャッシングを実行する、などです。
全く何の処理もなされないままのリクエストが素通りする、というのも気持ちが悪いですね。少なくとも、「機能チェーン」のいずれのハンドラーにも「引っ掛からなかった」リクエストが存在する、という警告を発するためのハンドラーをチェーンの一番最後に配置することも必要かもしれません; 例外処理構文でいうところの finally ステートメントの役割を果たすハンドラーです。
今回取り上げてきたミドルウェアアプリケーションの例では、「機能チェーン」に組み込んだ全てのハンドラーにリクエストが必ず流れるようにしていましたが、常にそうである必要はありません。「機能チェーン」の望む場所で処理を中断し return させることも可能です。
The Chain of Responsibility パターンはデータ処理を行うパイプラインを実装する一手段です。特に、あるリクエストを処理するためのハンドラーが複数存在し、実際にリクエストが来てみないとどのハンドラーで処理するのが最善であるのか判断できない、という問題に対しての解決策の1つを提供してくれるものです。

この投稿をメールでシェアする

0 comments

コメントはまだありません。

コメントを追加する(不適切と思われるコメントは削除する場合があります)