15 min/d

ぼうずやのにっき

bouzuya/rally-rxjs の core を小さくした

bouzuya/rally-rxjs の client の core を小さくした。

client から dom / history / state を拡張として分離した。new Client(...) に指定していた関連性の低い引数を、それぞれの拡張への引数に分離できた。

現状の拡張は client 内で次の役割を持つ。

  • app に渡す options を構築する
  • app に渡す action$ の一部を処理する

これらの処理の順序などが割といい加減なので、いまの拡張点を維持するかは分からない。また「 app に渡す action$ の一部を処理する」のは application 内に持っていくほうが良いかもしれない。

改めて見ても bouzuya/rally-rxjs の構造は単純だ。RxJS Subject を使った single dispatcher を持ち、そこに Action (type Action = { type: string };) を流す。流す対象の app は type app = (action$: Observable<Action>, options: any) => Observable<Action>; の形だ。 app の戻り値は自動で dispatcher に流される。Action が null や type === 'noop' になるまで dispatcher -> app -> dispatcher ... で循環する。

あともうすこし整理すれば切り出せそうだ。