2016-03-09 bouzuya/b-o-a をつくった
2016-03-05 につくった bouzuya/b-o-a のことを書く。
bouzuya/b-o-a は bouzuya/rally-rxjs の構造の核となる部分を抜き出したもの。構造の説明は 2016-02-27 に書いた bouzuya/rally-rxjs 0.2.0 の紹介や 構造説明用の gist を見ると良い。簡単に説明すると
- 単純な API
type Action = { type: string; data: any; }; type A = Action;
type Observable = /* RxJS 5 Observable */; type O<T> = Observable<T>;
type App = (action$: O<A>) => O<A>;
type run = (app: App) => void;
- 単一の Subject を持つ巨大な Observer Pattern
- Flux のような一方向の data flow
- 循環する Action
- Observable を流れ切った Action は自動で Subject に投げられてふたたび流れはじめる
- RxJS 5 Observable による合成・分岐・変換・選択
- Flux のような単純な if / switch を置き換える
- TypeScript による型定義
bouzuya/b-o-a は Cycle.js に強く影響されている。違いは、副作用を driver へ切り出すことに固執していない点・ Action を導入して API をより簡素化した点・その分の自由度が落ちてる点だろう。
まだ、ものをつくるには部品が足りていない。HTML ・ Virtual DOM ・ Router どれもない。すべて bouzuya/rally-rxjs 内部に埋まっている状態だ。bouzuya/b-o-a と同様に汎用化し抽出していくつもりだ。