- Webディレクター
- Rails エンジニア
- ECサイトの運用、管理栄養士
- 他22件の職種
- 開発
- ビジネス
- その他
こんにちは毎度お馴染みのそば屋です。
Androidアプリについて機能毎の作りなど小さい事は記事にしてたのにアプリの全体像をお伝えしていなかったことに気付きました。 今回はAndroidエンジニアとして応募してみたいな〜と思いつつも構成とかが分からないと怖いと思っている人向けにアプリの全体像を紹介します。
モジュール構成
Appモジュール
古い機能はFeatureモジュールでなく、こちらにも入っています。 今後、該当機能を大きく修正する時にそれぞれのFeatureモジュールを用意して切り出していく予定です。
このモジュール内に関してはRxを使っています。
Featureモジュール
新しい機能や作り直した機能はそれぞれFeatureモジュールを切っています。 こちらはcoroutinesやFlowを使っており、Rxは入れていません いつかRxを消せた時が我々の勝利です。 ※Rx否定ではなくモジュール分割完了の証としての意味です。
Repository
レシピや検索などある程度のまとまり毎にRepositoryを分けています。 新しい物はsuspend functionやFlowでやりとりし、古い物はRxでやりとりしています。
Navigation
ナビゲーションの定義をここにおくようにしています。 DeepLink系のString定義などもここにおいています。
Resource
アプリ全体で共有したい文字のリソースなどを配置しています。 背景のxmlなども共有したい物はここに置いています。
画面の作り
MVVMで作っています。 Fragment->ViewModel->Repositoryの流れになっています。 が、最近ホーム画面など多機能な画面においてFatViewModelになっている事に課題感を感じたため、 UseCaseを置くようにしたので今後は Fragment->ViewModel->UseCase->Repository の形式に移行していく予定です。 安易にUseCaseを用意することでFatViewModel対策にすることの是非について意見があることも認識していますが、 UseCaseが皆無と言うのも見通しが悪くなるので改善策の第一弾としてやっています。
利用しているライブラリなど
アプリは全てKotlinで書かれています。 DIにはKoin、その他各種JetpackとRetrofit、Moshi、Epoxy、Glide、ExoPlayer、MPAndroidChartなどを使っています。 Jetpack Composeも近いうちに導入しようと着々と準備を進めています。 DIもパフォーマンス、ビルド時にエラーが分かる観点からHiltにできたら嬉しいですが、少し壮大な夢になっています。
最後に
おいしい健康では、モバイル(iOS/Android)、Web、機械学習と様々な職種のエンジニアが働いています。エンジニアブログでは、おいしい健康のエンジニアメンバーが日々どんな課題に向き合っているのかを綴っています。過去のブログもありますので、ご興味ある方はぜひこちらも覗いてみてください。