blog.bouzuya.net

2016-03-09 bouzuya/b-o-a をつくった

2016-03-05 につくった bouzuya/b-o-a のことを書く。

b-o-a

bouzuya/b-o-abouzuya/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 と同様に汎用化し抽出していくつもりだ。