JS用のオブザーバーライブラリを作った
超単機能オブザーバーJSライブラリを作った。
動機
既存の有名MVCライブラリのどれもが気軽に使える規模・サイズじゃなかったのと、フレームワークというほど大きなものが欲しかった訳じゃなくて、本当に単機能なものが欲しかったので、車輪の再発明した。
ビューのライフサイクルも完全に自分で定義する前提で、好きなライブラリと自由に同居できるように構築。APIはXPCOMの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してくれる人、歓迎。