読者です 読者をやめる 読者になる 読者になる

React.js読んだ感想とかFluxアーキテクチャとか

この間、virtual DOM読んだついでにReactも読んでみた。 役に立つ話を書くつもりは一切無くて、感想だけ。

React.js

  • 定数だけのファイルとか(まさに*hな感じ)、デザインや使い方について書かれたコメントなど、全般的にC++に類似するstaticなコードの流儀で書かれている。
    • イケイケな「動的言語最高!」って言わんばかりのJSのコードではなく、明らかにC++の巨大プロジェクトなどに近い。Mozillaの中のJSとか、XPCOMな箇所で少し古いものとかにデジャブを感じる。
    • もっとも、巨大かつ基盤になるようなプロジェクトはこうせざるを得ないし、小手先のreadable性に頼らずに真っ当に巨大ソフトウェア開発してる趣が個人的な心象は最高に良い。
    • ただし、本来静的解析フェーズで片付けるべき箇所もカバレッジのためにテストを記述している箇所が有り、ちょっとそこはイケてないと感じるかもしれない……
    • まあFlowって静的型解析ツール出すらしいし、それに期待でいいんじゃないかな
  • Mixinが多用されていること自体は別に構わないのだが、フラットな混ぜ込み方ではなくて、ときどき菱形継承とか、別のところから引っ張ってきたメソッドFunction.call()するとか、手前いい加減にしろ感のあるコードがあるのが実につらい
    • こういうことやるならRustかC++で良かった感してくる
    • いいからとにかくRustの型システムとTraitをJSによこせ感
    • こういうところが、あんまり何度も読みたくは無い心象を受ける。
  • Virtual DOMと謳ってはいるが、内部的にはただのデータ構造があるだけ。
    • vtreeみたいにわかりやすい形では存在しない
    • まあReact IRとそれを取り扱う機構をVirtual DOMって呼んでるだけですな
  • 内部的に処理をアトミック操作にするために、transactionって名前でバッチ処理モードを行っている
    • で、このバッチ戦略は、プラガブルに拡張可能だったりするのが面白いよね!

Fluxアーキテクチャについて

  • 全部メッセージパッシングで片付けるの、夢というか正道感ありますよね
  • 彼らのMVCのネガティブケースのたとえが「よくあるMVC」とは、あんまり思いたく無い
  • が、ある時点で、同時に任意の個数のビューおよびコントローラが存在している場合(n個前のビューのキャッシュとかね)、currentのビューで発生した変更を、他すべてに伝えるのはまじめにイテレーションすると正直ダルい。
    • そこに非同期性が入ってくると、メッセージ投げてコールバックする以外の解決策は現実的ではない
  • だったら、一発メッセージを発行して、購読しているインスタンスが勝手に変更してくれる方が良いというアプローチだと理解。アーキテクチャとしては素直だよね。
  • まー、次第に自然にこんな感じの設計になりますわなーって感想

まとめ

  • コードは読みたくないが、使いたいのがReact.js
  • とはいえ、テストまで含めてなんでもかんでも全部入りアプローチってAngular以外無いのがつらいよねー
  • いい加減に新しいライブラリ探しまわるのは本意じゃないのでReactで当面片付けたい