うな(。・ε・。)

Android, iOS, AppEngine まわりのめもめも

「リアクティブ」ほんとに要る?

リアクティブは値の変化に対して、対応した処理を動かせることができる。これは直感的にはとても合理的であり、キレイな対応となっている。

実際、リアクティブに書くと処理が重複しにくかったり、値の変化に対して起こる動作がわかりやすく整理される、といった効果がある。

しかしながら、実際的にはリアクティブよりも地道な一本道コードのほうが最終的には保守しやすい、という話。 というものを書こうとしたけれども面倒になったので見出しだけ。

  1. 値に対してリアクティブに動作をさせないほうがいい
    • ほんとうに、その動作は値に対してリアクティブか?
    • 動作はアクションに紐付いている
      • User の on_create に Mail を送るのはほんとうに Model でやるべきことか?
      • よくよく考えると、「ユーザの作成」というアクションが「Mail の送信」という動作を引き起こすべき。
      • User の on_create に対応してなにが起こるか?が一貫的に書かれているよりも、アクション(リクエスト)から全ての動作が一本道に追えるほうが遥かに大事
      • これはクライアントアプリでも同様(UIのほうがこういったことは起こりやすいと思う)
    • 真に値にリアクティブなのは Computed Value (Cache など) くらいでは?
  2. リアクティブなコードは暗黙知の温床
    • コードから動作が「追えなく」なる
    • 汚いコードより、非同期に動きまくるコードのほうがつらい(そもそも追えない)
      • 暗黙知をより多く要求する
      • というか本人しか読めない
    • 前提知識なく読みやすいのはアクションから入り、一本道に処理が書かれるコード
  3. なんだかんだで、泥臭く一本道に実装したほうが良い
    • 処理が重複したり、あちこちで状態もったりするのは設計/書き方で解決すべき話です。

ところで、なぜこのような結論(感想?)になるのかというと、既存のプログラミング言語が上から下に書かれ、処理もまたそうであるからです。

つらい。