広島三原出張からの一時帰宅でバスの中でこれを書く。出張は1週間を予定していたが4日目で帰宅することになった。
TCA の憂鬱
出張中の飲み会で iOS の TCA は良くないのでは?と話が上がった。SwiftUI をシンプルなビューを表現するものとし、操作に関するインタラクションの遷移を TCA へ委ねることで責務が明確になり、実装にテストもしやすくなるのが売りの理解をしている。
根本の状態遷移が膨らむ問題
どのアプリケーションにも全てのインタラクションへのルートとなる状態の始点が存在する。そこに様々なドメインの状態遷移を含んでしまうことで、コード量が大きくなりすぎてしまい、理解することが難しくなったという声をよく聞く。これに関しては、ドメインを整理し、そのドメインに閉じた状態遷移も整理することで初めてリファクタリングが可能になると考える。それができるとルートとなる部分は各ドメインごとの状態遷移の始点へ渡すだけとなり、大きなモノリシックな遷移フローを修正できるはずである。ステートマシンに他のステートマシンを含めると大きくなってしまうのは当然な気がする。
cancel や action
状態遷移だけでなく、async なアクションを実行したりキャンセルしたりできる。タイマー処理もある。これらの機能を組み合わせることで denounce や throttle も簡単に実装できる。便利な一方動作が遅いことがあると思う。
例えばマイクから音声データを受信して処理を委譲すると TCA は