2点あると思う。
- Callbackを呼ばれて欲しくない時が結構ある。暗黙的にそれが起こるとキツイ。
- 複数の処理を一箇所に書いちゃいがち。複数の処理に依存関係があるとキツイ。
Serviceクラスの問題点
明示的に呼ぶので1をクリアしてる。 2をクリアしてない。
しっかり処理毎にクラスに分けてServiceクラスから呼び出してればいいが、Serviceクラスの粒度がCallbackのエントリポイントと変わりない場合が多いので複数の処理を一箇所に書いちゃいがち。
pub/subを使う
明示的に呼ぶので1をクリアしている。 いかにも処理毎にクラスを作るようにできてるので2をクリアしている。
既存のpub/subライブラリ
- krisleech/wisper: A micro library providing Ruby objects with Publish-Subscribe capabilities
- Kris Leech / ma · GitLab
これでいいんだけど、この用途には非同期で実行する機能はオーバースペックに感じる。 (特によくあるユースケースの通知などではそちらの方で非同期の仕組みを備えているため)
薄いpub/subライブラリ
それを解決するために、非同期機能を持たず、イベントに文字列(シンボル)を使うpub/subライブラリを作りました。
newspaperについて詳しくは下記エントリーに書きました。