2点あると思う。

  1. Callbackを呼ばれて欲しくない時が結構ある。暗黙的にそれが起こるとキツイ。
  2. 複数の処理を一箇所に書いちゃいがち。複数の処理に依存関係があるとキツイ。

Serviceクラスの問題点

明示的に呼ぶので1をクリアしてる。 2をクリアしてない。

しっかり処理毎にクラスに分けてServiceクラスから呼び出してればいいが、Serviceクラスの粒度がCallbackのエントリポイントと変わりない場合が多いので複数の処理を一箇所に書いちゃいがち。

pub/subを使う

明示的に呼ぶので1をクリアしている。 いかにも処理毎にクラスを作るようにできてるので2をクリアしている。

既存のpub/subライブラリ

これでいいんだけど、この用途には非同期で実行する機能はオーバースペックに感じる。 (特によくあるユースケースの通知などではそちらの方で非同期の仕組みを備えているため)

薄いpub/subライブラリ

それを解決するために、非同期機能を持たず、イベントに文字列(シンボル)を使うpub/subライブラリを作りました。

komagata/newspaper

newspaperについて詳しくは下記エントリーに書きました。

newspaperでActiveRecordのCallbacksを置き換える - komagataのブログ

Comments


Option