-
Notifications
You must be signed in to change notification settings - Fork 0
architecture
Leo edited this page Feb 16, 2023
·
9 revisions
アプリのアーキテクチャは以下のガイドラインを意識しています。
https://developer.android.com/topic/architecture
UI Layerはlib/ui 、 Domain Layerはlib/domain 、 Data Layerはlib/dataに配置しています
上記のState holdersはStateNotifierを使う運用にしています。
UI elementsは、Widgetになります。
- 各環境への切り替えは
dart-define-from-file
を使って制御します PR - API KEYなどの秘匿情報は、Dart-define-from-file + 環境変数ファイルで管理する運用にしています。
- チームメンバーはローカル環境にてここの値を書き換えます。 より良い形を模索中....
- ui layer
- シンプルなロジックであれば
StateNotifier
で直接Repositoryを呼び出します。 - エラーハンドリング(try catch)は
StateNotifier
で行います。 - Threading
- StateNotifierはStateHolderに該当します。シンプルな画面であれば、StateNotifierなしで、setStateを使う手もありかもしれない。
- riverpodはflutter_riverpodを使う運用です
-
hooks_riverpodはチームメンバ全員が完全に理解した上で適切に使わないと思わぬ副作用を招くと判断し導入していません
- 細かい理由としては以下の画像の通り、Jetpack Composeの
LaunchedEffect
の扱いの注意点と同じでhooks_riverpod
は副作用を招きやすいパッケージのため最終手段として取っておきたい。link
- 細かい理由としては以下の画像の通り、Jetpack Composeの
- シンプルなロジックであれば
-
domain layer
-
data layer
-
Proguard / R8 (For Android)
- Stableのライブラリを使わないと、本番リリース時に思わぬトラブルを招くので、alpha版のライブラリは極力使わない。
- Native Androidアプリの開発にて、Navigationライブラリのalpha版利用時に痛い思いをした。https://github.com/LeoAndo/AndroidAppTemplate/issues/40#issue-925121453
パッケージの利用は最小限にしたい
https://pub.dev/packages/logger/versions
https://pub.dev/packages/freezed/versions
https://pub.dev/packages/http/versions
https://pub.dev/packages/import_sorter/versions
https://pub.dev/packages/dynamic_color
https://pub.dev/packages/flutter_riverpod/versions
https://pub.dev/packages/package_info_plus/versions