暫定の結論
- ドメインモデルをコンポーネントとして表現する場合は、Viewの外*1に状態を持ち、propsとして状態を流し込む
- ドメインモデルの表現ではない状態(UIとしての中間状態)はstateとしてコンポーネントの内部に隠蔽して保持する
- UI上の操作で、別のコンポーネントの状態が変わってほしいときは、ドメインモデル同士のインタラクションで解決できないか立ち止まって考えてみる
- 異なるコンポーネントのstate同士を連携させたいときは、それらがドメインモデルとしてくくり出せないか考えてみる
60fpsの世界を実装したことはないのでその辺は対象外です。
いかにも当たり前っぽい結論になりましたね。また何か思いついたら日記にしていきます。
考えたときの思考をシリアライズしたもの
- UIの状態とデータの状態に大きくは分けたくなる
- どちらにもまたがるケースが出てくる
- リストの順序
- 決めの問題として、データに寄せてもよい
- 後から仕様変更で、UIの状態からデータの状態に移動するのがダルいという意見
- 究極的にはすべてをデータの状態として管理するのは可能ではある
- Fluxループを回るのがダルい
- 二つの問題が混ざっているのに、境界がはっきり引けない系の問題
- UIの状態とはなんなのだろうか?
- UIとはなんなのだろうか?
- データを人間にわかりやすく伝える手段
- データを人間にとってわかりやすく操作する手段
- データの閲覧・操作が目的
- データをUIとして表現する
- データとその表現、特に表現を共有するとはなんなのか?
- データとデータの依存関係
- observerパターンでは?
- Rx川の予感
- 実際にネイティブアプリ界では流行ってるらしい
- なんでUIの状態に依存関係が?
- たぶんデータそのものに依存関係がある
- 目的はデータの操作で楽をさせてあげるため
- 依存関係をもとに自動化をしている
- データに依存関係あるなら、データレイヤで変化を伝えればいいのでは?
- ほとんどのケースではこれが正しい
- UIの状態を共有するのはアンチパターン
- しかし
- Fluxループを回るので遅いケースがある
- JavaScriptを使うなネイティブでやれ
- Fluxループを回るので遅いケースがある
- ほとんどのケースではこれが正しい
- 依存関係のないUIの状態
- ある
- モーダルが開いてるよ
- フォーカス当たってるよ
- コンポーネントの中に隠蔽した状態でよい
- 結論
- UIとはなんなのだろうか?
Scrapbox上で寝ながら考えたところたいへん捗りました。
見返してみると、最初の方は問題がうまく分割されていないために用語が複数の文脈を背負っていたり、最初と最後で矛盾しているかのように見える文章になっていますが、問題が解決されていく様とはこんなもんなのでいいとしましょう。