@Composable
fun ComicLineItem(
comic: Comic,
onItemClick: () -> Unit = {},
...,
) {...}
Composableの例
9
Slide 10
Slide 10 text
data class Comic(
val id: String,
val title: String,
val summary: String,
val authors: List,
val imageUrl: String,
...,
)
受け取っているデータの例
10
Composableの引数にしたとき、
必要のない再コンポーズが
起こるようになる
List やその中身が Immutableではない
Slide 11
Slide 11 text
@Immutable
data class Comic(
val id: String,
val title: String,
val summary: String,
val authors: List,
val imageUrl: String,
...,
)
11
@Immutable を宣言することで、Compose
Compilerが安定したクラスと
判断できる
全てのデータで
@Immutable を宣言すれ
ば良さそう?
良くない
Slide 12
Slide 12 text
@Immutable
data class Comic(
val id: String,
val title: String,
val summary: String,
val authors: List,
val imageUrl: String,
...,
)
12
MutableList の可能性があり
運用を間違えると壊れる
Kotlin でいう「 !! 」と同じ
Slide 13
Slide 13 text
data class Comic(
val id: String,
val title: String,
val summary: String,
val authors: ImmutableList,
val imageUrl: String,
...,
)
13
Kotlin / kotlinx.collections.immutable
を利用し ImmutableList を定義ができる
安定化の強制が可能
Slide 14
Slide 14 text
data class Comic(
val id: String,
val title: String,
val summary: String,
val authors: ImmutableList,
val imageUrl: String,
...,
)
14
クラスの利用先も ImmutableList に依存
Composeとは無関係のモジュールも
Composeに依存してしまう
Slide 15
Slide 15 text
15
Model
Tracker
Compose
Feature
Compose
Common
Repository
Compose 依存
data class ComicLineModel(
val comicId: String,
val comicTitle: String,
val comicImageUrl: String,
val comicSummary: String,
...,
) {
constructor(comic: Comic) : this(...)
}
ComicLineItem用のModelを定義
19
Slide 20
Slide 20 text
20
Model
Tracker
Compose
Feature
Compose
Common
Repository
Compose 依存
Slide 21
Slide 21 text
21
Model
Tracker
Compose
Feature
Compose
Common
Repository
Compose 依存
Viewに関心のあるモジュー
ルだけがComposeに依存