💬

Apache Commons Chainとはなんなのか?

に公開

今回は、Apache Commons Chainについて調べてみました。今回も以下のツールを使って対象プロジェクトを決めました!

https://zenn.dev/akasan/articles/7e30ad266c02c4

※ 本企画に関する記事の目的は、それぞれのプロジェクトを本格的に深ぼるのではなく、プロジェクト名⇆どんな内容かをパッと思い出せるようにすることを目指します!
※ とはいえ深ぼってみたいプロジェクトがあればどんどん複数連載になると思います。

Apache Commons Chainとは?

公式サイトによると、Gang of Fourの責任連鎖パターン(chain of responsibility pattern)の実装に関する実装のようです。責任連鎖パターンとはWikipediaによると

Chain-of-responsibility パターン, CoR パターンは、オブジェクト指向設計におけるデザインパターンの一つであり、一つのコマンドオブジェクトと一連の処理オブジェクト (processing objects) から構成される。各処理オブジェクトは、処理できるコマンドオブジェクトの種類と、自身が処理できないコマンドオブジェクトをチェーン内の次の処理オブジェクトに渡す方法を記述する情報を保持する。また、新たな処理オブジェクトをチェーンの最後に追加する機構を備える。

とのことで、オブジェクト指向でデザインする際のパターンの一つということみたいです。私自身このデザインパターンは知らなかったのですが、複数ハンドラーを順に適用して、送り手と受けてを分離することを考慮するということで、APIの実装などにも応用されるのかな?と感じます。

Apache Commons Chainは記事執筆時点ではアクティブなプロジェクトであるとのことです。なお、実装言語はJavaのみのようです。

https://commons.apache.org/dormant/commons-chain/

https://projects.apache.org/project.html?commons-chain__dormant_

https://ja.wikipedia.org/wiki/Chain_of_Responsibility_パターン

特徴

プロジェクトのトップページにて特徴が述べられているのですが、このデザインパターンにあまり詳しくなかったので、今回はChatGPTに要約させてみました(私の理解力の敗北です、、、)。その結果、以下のようにまとめてくれました。

  • Apache Commons Chain は、「GoF(Gang of Four)」デザインパターンで紹介されている 責任の連鎖パターン(Chain of Responsibility) を利用して、複雑な処理フローを整理するための仕組みを提供します。このライブラリでは、処理を「コマンド(Command)」という単位で定義し、それらを連結した「チェイン(Chain)」として実行します。各コマンドは execute() メソッドを持ち、動的な状態を持つ context を受け取り、処理を続けるか終了するかを boolean 値で返します。

  • 主な特徴

    • Contextの抽象化により、Servlet や Portlet など特定の環境に依存せずにコマンドを実装可能
    • Filterインターフェースを使うことで、前処理・後処理(例:リソースの確保と解放)も扱える
    • Catalog を利用して、コマンドやチェインの登録・動的な選択が可能
    • 依存が少なく、軽量で、標準のJDK以外に特別な依存がない
    • Web環境(Servlet/Portlet)向けの拡張も提供(必要に応じて利用)
  • 利用場面

    • StrutsのようなWebアプリケーションのフロントコントローラだけでなくビジネスロジック層や永続化層などでも、処理を構造的に組み立てて再利用・テストしやすくできる。

このように、Commons Chain は柔軟でテスト可能な構成を支援し、さまざまな用途に適した責任の連鎖パターンの実装を簡単にします。

とても簡潔にまとめてくれてすごい助かりましたが、わからない分野があると調べるのがとても大変だなと感じました(今までのApacheの記事はなんとかなったけど今回は負けです、、、)。そもそもGoFというデザインパターンでの紹介ということですが、それ自体をほとんど認識していたなkったので、勉強します。。。

まとめ

今回はApache Commons Chainについて調べてみました。調べたとは言ったものの、デザインパターンについて詳しくなかった結果、ChatGPTのお力を借りることになってしまい、私の実力不足を痛感しました。調べて感じたこととして、GoFのデザインパターンに関する理解があるのは重要だと思ったので、できるだけ早い段階でGoFのデザインパターンについて調べてまとめてみようと思います。

Discussion