JS用のオブザーバーライブラリを作った

超単機能オブザーバーJSライブラリを作った。

動機

既存の有名MVCライブラリのどれもが気軽に使える規模・サイズじゃなかったのと、フレームワークというほど大きなものが欲しかった訳じゃなくて、本当に単機能なものが欲しかったので、車輪の再発明した。

ビューのライフサイクルも完全に自分で定義する前提で、好きなライブラリと自由に同居できるように構築。APIXPCOMのnsIObserverServiceとDOM EventListenerを参考にしています。

機能的には、これでほぼ完成で、あとはバグ取りとか、legacy IE向けにES3ブランチ作ったり、逆にES6 Map, Setを使うためのブランチを作ったり、テストを書き直したり、設計上余力があればパフォーマンス改善とかやる予定です。将来的にはWeb Workers向けのアダプタも作成したい。

今後の予定(やりたいこと)

  • Eat this dogfood!
  • テスト書き直し
  • clean up
  • パフォーマンス測定
  • ES3 compat
  • ES6 support

設計に対するFAQ

ObserverSubject.add()の第2引数になぜfunctionを渡せないのか

コールバックで済まない規模に導入を前提としているのと、安易にfunctionを渡せるようにすると、破綻した設計のコードが生まれるようになるからです。考慮した上での制約。

ObserverSubject.notify(), Observer.handleMessage()は、なぜMessageをオブジェクト形式で受け取らないのか

毎回、オブジェクトをnewするのがダルいため、現行はこのようなAPIにしている。実践を通したフィードバックやパフォーマンス測定の結果、将来的に変更の可能性があると思ってる。

dogfoodしてくれる人、歓迎。