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 で解決されるということのようだ。