パイプとフィルターパターン
疎結合なコンポーネントを組み合わせてデータ操作を行う。
Unixコマンドのパイプと同じもの。
要素
フィルター。データを読み込み、変換し、書き出すコンポーネント。
データが読み込まれるとすぐ処理を開始することを期待される。
意図する入力、出力が定義されている。
パイプ。データの順序を維持し、あるフィルターから次のフィルターへデータを転送する。
パイプは1組の入出力を持ち、これ自身はデータを変更しない。
特にデータを生成する役割をソース、最終的に受け取る役割をシンクということがある。
関係
連結。フィルターAとフィルターBが、パイプCで連結される。
規約
パイプとフィルターは互換性を持つ必要がある。互換性のないパイプ・フィルターは接続できない。
フィルターは互いに完全に独立していなければならない。自分の前段または後続に関する知識は持たない。
強み
パフォーマンス、再利用性、修正容易性を促進する。
弱み
対話式のUIを差し込むことができない。
このパターンは信頼性を保証/促進しない。
ただしエラーケース用のフィルターを導入することで補助できる。
素朴な実装で多数のフィルターを並列実行すると計算量が多くなりすぎ、パフォーマンスが低下する。