Android開発メモ (DataBinding)

DataBinding

Androidアプリ開発のDataBindingは、WPF(C#)のDataBindingとは完全に別物である。

ActivityはXMLの定義を元にViewを操作する。Viewの要素はfindViewByIDを使って探さなければならない。nullになる可能性があり、危険である。

DataBindingが有効な場合、コンパイル時にxxxBindingクラスが自動生成される。これにより、ActivityからViewに安全にアクセスできるようになる。なお、この機能はDataBindingの中のViewBindingが提供する。

DataBindingが有効な場合、XMLに変数を使えるようになる。変数はXMLに宣言して、実体はActivtyなどに定義する。これにより、EditTextの入力内容を自前の変数に直接入れられるようになる。これだけだとあまりメリットが分からない。

LiveData (Observable data holder)をバインドすると、LiveDataの更新時にUIがObserverとなってUIが自動更新されるらしい。まだ試していない。

ViewModel + LiveData + DataBinding を導入してようやくやりたいことができるような気がする。

Repository

Repositoryパターンの意味を少し誤解していた。RepositoryはDatabaseのデータを永続化するだけのものではない。ドメインのデータを保持するならなんでもRepositoryにできる。例えばLoginRepositoryはユーザーのログイン状態を保持し、返すことができる。

Repositoryのデータを使ってビジネスロジックを実現することをServiceという。だからServiceはRepositoryに依存する。

Repositoryはドメインデータへのアクセスを隠蔽する。RepositoryはDaoを使ってデータベースにアクセスしてもいいし、Httpリクエストを発生させてもいい。キャッシュコントローラを内包して、キャッシュにないデータはリアルタイムでフェッチすれば、メモリ使用量を抑えられる。利用者からすれば、データが読み書きできれば何でもよい。

Repositoryのメソッドは完了までに時間がかかる。Repositoryの考え方からすれば同期型が標準だと思う。非同期型のメソッドを提供してもよいが、非同期のエラー処理の責任をユーザーに負わせるのは厄介かも。

Kotlin

ソースコードを色々読んだ。Kotlinをきちんと学んでいないので大変だ。

  • Kotlin スコープ関数
    • クラスのメンバのみを操作する方法
    • with, apply, let, run, also
  • Reactivex
    • Observable, Flowable, Single, Maybe, Completable