画面は状態を表示するだけにし、操作はイベントとして ViewModel に送る。状態は一方向に流れる。
アプリの設計で一番大事なのは、状態(画面に何を出すか)をどこに置き、どう変えるかを決めることです。今の主流は単方向データフローで、「操作 → 状態を変える → 状態から画面を描く」と一方向にだけ流します。画面が状態を直接書き換えないので、「なぜこの表示になったか」を追いやすくなります。
| 流れ | 例:いいねボタン |
|---|---|
| 1. 操作をイベントとして送る | 画面が onLikeClick(id) を ViewModel に送る |
| 2. ViewModel が状態を変える | Repository に保存を頼み、UiState の該当の項目を「いいね済み」にする |
| 3. 画面は状態を描くだけ | 新しい UiState を受け取って描き直す。画面は自分で表示を書き換えない |
MVVM・MVI などの形の違い、状態の置き場所は、この後のトピックで扱います。
面接ではこう答える
単方向データフローは、操作をイベントとして ViewModel に送り、ViewModel が状態を変え、画面はその状態を表示するだけ、と一方向にだけデータを流す設計です。画面が状態を直接書き換えないので、なぜこの表示になったかを追いやすく、テストもしやすくなります。MVVM はこの形の代表で、今は画面の状態を1つの UiState にまとめる形がよく使われます。
Appとの関わり画面の設計とレビューの基本で、表示がおかしいときに原因を追う道筋にもなります。