おいしい健康 開発者ブログ

株式会社おいしい健康で働くエンジニア・デザイナーが社内の様子をお伝えします。

Androidアプリの構成

こんにちは毎度お馴染みのそば屋です。

Androidアプリについて機能毎の作りなど小さい事は記事にしてたのにアプリの全体像をお伝えしていなかったことに気付きました。 今回はAndroidエンジニアとして応募してみたいな〜と思いつつも構成とかが分からないと怖いと思っている人向けにアプリの全体像を紹介します。

モジュール構成

f:id:oishi-kenko:20210907084221p:plain

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にできたら嬉しいですが、少し壮大な夢になっています。