android: データレイヤーとBLE
2024/10/27
BLE機器操作について、あとは Repository と Data source を何とかすれば終わりだろう、と軽く考えていたのだが、 まったくイメージが沸かないことに気付く。。。
Codelabs をやろう。
- データレイヤ - Android Developers
model.MarsPhotoというdata classが既にあるdata.MarsPhotosRepositoryというインターフェース- それを継承した
data.NetworkMarsPhotosRepositoryというクラス
- それを継承した
- Repositoryでは
suspendメソッドにする
BLEの場合、スキャンを開始すると OS が非同期でデバイス情報を返してくる。
ViewModel でやっていたときは StateFlow を使っていたが Repository の場合はどうするとよいのだろうか?
しばしばそういう場合がありそうに思うが、思いつかないのでこれもコールバック方式にする。
- OS -(callback)->
BleScan- -(callback)->
Repository - -(callback)->
ViewModel - -(StateFlow)-> UI
- -(callback)->
データレイヤーはsuspend関数と書いてあるがコールバックにしたので外した。
「Javaの場合はコールバックなど」とあったので、Kotlin だとあまりやらない方法なのかもしれない。
LedControlRepositoryのDIでBleScanを引数にしつつ、BleScanもDIで解決するやり方を@Providesで書くことができなかった。
どうやるとよいのだろう?
今回は @Binds で回避したのだが、できると思うのだよねぇ。
今日はここまで。
追記
@Provides でできた。
fun provideLedControlRepository(bleScan: BleScan)のように引数に入れておき、そちらが DI で解決されるということのようだ。
writer: hiro99ma