Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AndroidのViewにおける ステートフルとステートレスと状態ホルダーの話/android-view-stateful-stateless-stateholder
Search
suzukiyoshitaka
October 18, 2023
Programming
0
180
AndroidのViewにおける ステートフルとステートレスと状態ホルダーの話/android-view-stateful-stateless-stateholder
下記勉強会イベントで発表した内容です。
https://wantedly.connpass.com/event/297601/
suzukiyoshitaka
October 18, 2023
Tweet
Share
Other Decks in Programming
See All in Programming
ADRを一年運用してみた/adr_after_a_year
hanhan1978
7
2.4k
Git Lint
bkuhlmann
4
760
Apache Hive 4 on Treasure Data
ryukobayashi
1
410
What We Can Learn From OSS
inouehi
0
430
Domain-Driven Transformation
hschwentner
2
1.5k
はてなにおける CSS Modules、及び CSS Modules に足りないもの / CSS Modules in Hatena, and CSS Modules missing parts
mizdra
7
970
見た目から始める生産性向上
ikumatadokoro
10
1.3k
OpenAPIを中心に考えるAPI開発入門 / Introduction to API Development with a Focus on OpenAPI
seike460
PRO
2
170
dbtのドメイン分割による データ基盤の改善とDigdagとの連携
sakama
0
440
PHPの次期バージョンはこの時期どうなっているのか - Internalsの開発体制について - PHPカンファレンス小田原
youkidearitai
PRO
1
220
PostmanでAPIの動作確認が楽になった話
h455h1
0
180
Kotlin Multiplatform at Stable and Beyond (Android Makers 2024)
zsmb
0
440
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
6
3.4k
How to train your dragon (web standard)
notwaldorf
74
5.2k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
228
16k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
13
8.3k
Design by the Numbers
sachag
274
18k
Web development in the modern age
philhawksworth
203
10k
A better future with KSS
kneath
231
16k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
104
6.6k
Writing Fast Ruby
sferik
622
60k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
188
16k
Optimising Largest Contentful Paint
csswizardry
12
2.4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
242
1.2M
Transcript
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. AndroidのViewにおける ステートフルとステートレスと
状態ホルダーの話
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. 自己紹介 鈴木善陽(スズキ
ヨシタカ) チームラボ所属 Androidエンジニア4年目 Fitbit Charge 6 買いました
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. 1. 発端
2. ステートフルって? a. ステートフルの特徴 3. ステートレスって? a. ステートレスの特徴 4. どちらを選択するべき? 5. まとめ 目次
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. • UIの状態はViewModelで持つべきだと漠然と思っていた🤔
• Android Viewではあまり意識しなかったけど、Composeだと rememberやrememberSaveableといった概念が登場した ステートレスやステートフル、 状態ホルダーについて良く知りたくなった💡 発端
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. ステートフルって?
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. • ViewがUI状態を持っていること
ステートフルって?
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. ステートフルって? •
呼び出し側
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. • メリット
◦ 呼び出し側はViewの状態を考慮しなくて良い ▪ 値を渡したり、渡されなくて良いので、スッキリかける • デメリット ◦ テストしづらい ▪ Composable内でロジックがある場合、 ViewModelのUnitTestではカバーできない ◦ ビジネスロジックから制御できない ステートフルの特徴
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. ステートレスって?
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. • ViewがUI状態を持っていないこと
ステートレスって?
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. • 呼び出し側
ステートレスって?
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. • ViewModel
ステートレスって?
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. • メリット
◦ UIとロジックの関心が分離できる ◦ ビジネスロジックから制御ができる ◦ UIを再利用しやすい • デメリット ◦ コードが複雑になる ▪ ビジネスロジックから UIの間でデータのやりとりがコードに現れる ステートレスの特徴
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. どちらを選択すべき?
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. 公式資料を読んでみる どちらを選択すべき?
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. どちらを選択すべき? •
ビジネスロジックから制御する必要のない部分はステートフル ◦ 例:スクロール状態 ◦ 例:Expand、Collapseの動作 • ビジネスロジックから制御する必要がある部分はステートレス ◦ 例:TextFieldへ入力した値に対するバリデーション ◦ 例:Horizontal PagerとTab Rowで、APIの返却によって選択タブを制御 状況に応じてハイブリッドに組み合わせる
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 公式
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. 実際にコードで見てみる どちらを選択すべき?
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. どちらを選択すべき?
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. 参考:https://developer.android.com/topic/architecture/ui-layer/stateholders?hl=ja#choose-viewmodel イベント
状態 状態ホルダーまで遠い どちらを選択すべき?
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. どちらを選択すべき?
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. 参考:https://developer.android.com/topic/architecture/ui-layer/stateholders?hl=ja#choose-viewmodel イベント
状態 状態ホルダーまで近い どちらを選択すべき?
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. どちらを選択すべき? •
今回のサンプルの場合だと... ◦ バリデーションなど、ビジネスロジックを通してから UI状態を決定したい →ステートレス ◦ ビジネスロジックを通す必要がない、 ただ入力状態を表示するだけで良い →ステートフル
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. まとめ できるだけ状態ホルダーまでの道のりは短くしつつ、
ステートレスとステートフルを使い分ける or 組み合わせる
We are the future. www.team-lab.com チームラボ株式会社 teamLab inc. EOF