android経験ログ
実務でandroid をゼロから始める開発をしてきましたが、
その中で、取捨選択をしたライブラリや、設計手法を自分のために残しておきます。
ちなみに経験はゼロでしたので、間違った方法の可能性があります。
自分の中ではわかりやすい方法として考えてます。
【採用ライブラリ】(kotlinバージョンなどは省きます)
・rxandroid / rxjava 通信回りを disposable で書きたかった
・Realm / 後述
・retrofit2 + okhttp3(logging-intercepter) / 後述
・moshi / 後述
・converter-moshi / 後述
moshi + retrofit2 + realm で「open class XXX(var: prop Int ~~ ): RealmObject()」
にすることで、API通信結果取得+Realm格納クラスとして利用しました。
・picasso 画像表示ライブラリ
・groupie+groupie-viewViewBinding / リスト表示の実装をadapterクラスを使わずに実装できる
【設計】
(前提)
これまでに見たことある実装が、apiの役割ごとに、Interface と APIClient を用意している実装で、
エンドポイントを1つ加えるたびに「どこに書くべきか?」「修正量が多い」ということがあった。
・1 interface / 1 ApiClient で Apiclient は addIntercepter や extension して後からでも拡張可能な状態にする
共通で必要なリクエストトークンはあとでセット、今後Clientクラスを分けたくなった場合は、
分ける。(エンドポイントが全く異なる場合などは分けたほうが良いかも?)
・activity + viewModel + view
を採用。
・activity ではApiClient をインスタンス化、 disposable も変数で用意し通信処理も兼ねる。
・viewModel はactivity が通信した結果を受け取り、viewBindingを用いて画面表示
・viewと呼んでいますが、上述しているrecyclerviewのgroupie部分が主な箇所。
・各画面は通信結果をRealmに保存しデータ更新などはRelm経由で行う
・通信の必要がない画面は。Realmからデータを取得して処理
【個人感想】
開発するうえで問題なのが、担当者が退職した時に実装の引き継ぎが一番困難だと思ってます。
その際に、
なるべく高度な技術(Dagger / Inject)などを使わずに、内部のコードをコピペすることでもある程度問題ない状態を目指してます
今回の実装を実際にプロダクトに取り入れた結果、android実務未経験の方でも別の画面の実装を見ながら模倣することで1画面の新しい機能(通信含め)を作ることができたので、
自分の中では満足してます。
(個人githubにアップして使いまわせるようにしておこう。。)