Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AndroidのViewにおける ステートフルとステートレスと状態ホルダーの話/android-view-stateful-stateless-stateholder

AndroidのViewにおける ステートフルとステートレスと状態ホルダーの話/android-view-stateful-stateless-stateholder

下記勉強会イベントで発表した内容です。
https://wantedly.connpass.com/event/297601/

suzukiyoshitaka

October 18, 2023
Tweet

Other Decks in Programming

Transcript

  1. We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. 自己紹介 鈴木善陽(スズキ

    ヨシタカ) チームラボ所属 Androidエンジニア4年目 Fitbit Charge 6 買いました
  2. We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. 1. 発端

    2. ステートフルって? a. ステートフルの特徴 3. ステートレスって? a. ステートレスの特徴 4. どちらを選択するべき? 5. まとめ 目次
  3. We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. • UIの状態はViewModelで持つべきだと漠然と思っていた🤔

    • Android Viewではあまり意識しなかったけど、Composeだと rememberやrememberSaveableといった概念が登場した ステートレスやステートフル、 状態ホルダーについて良く知りたくなった💡 発端
  4. We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. • メリット

    ◦ 呼び出し側はViewの状態を考慮しなくて良い ▪ 値を渡したり、渡されなくて良いので、スッキリかける • デメリット ◦ テストしづらい ▪ Composable内でロジックがある場合、 ViewModelのUnitTestではカバーできない ◦ ビジネスロジックから制御できない ステートフルの特徴
  5. We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. • メリット

    ◦ UIとロジックの関心が分離できる ◦ ビジネスロジックから制御ができる ◦ UIを再利用しやすい • デメリット ◦ コードが複雑になる ▪ ビジネスロジックから UIの間でデータのやりとりがコードに現れる ステートレスの特徴
  6. We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. どちらを選択すべき? •

    ビジネスロジックから制御する必要のない部分はステートフル ◦ 例:スクロール状態 ◦ 例:Expand、Collapseの動作 • ビジネスロジックから制御する必要がある部分はステートレス ◦ 例:TextFieldへ入力した値に対するバリデーション ◦ 例:Horizontal PagerとTab Rowで、APIの返却によって選択タブを制御 状況に応じてハイブリッドに組み合わせる
  7. We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. 参考:https://developer.android.com/topic/architecture/ui-layer/stateholders?hl=ja#choose-viewmodel どちらを選択すべき?

    「最終的には、消費される場所に最も近い 状態ホルダーを使用して UI 状態を生成す る必要があります。」 by 公式
  8. We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. どちらを選択すべき? •

    今回のサンプルの場合だと... ◦ バリデーションなど、ビジネスロジックを通してから UI状態を決定したい →ステートレス ◦ ビジネスロジックを通す必要がない、 ただ入力状態を表示するだけで良い →ステートフル