株式会社NeverのFlutter設計では3層構成 Presentation → Domain → Infrastructure を基本とした軽量DDDな設計を採用する。
デメリットよりメリットの方が大きいのですぐリカバリーできる
※設計にはこれが正解というものはありません。設計がビジネス要件とマッチしているかが重要だと考えています。本設計をベースとして大きく乖離しない程度にルールや指針を柔軟に決めれば良いと考えています。
※ Modelの概念はMVCから引用しています
モデルはそのアプリケーションが扱う領域のデータと手続き(ビジネスロジック - ショッピングの合計額や送料を計算するなど)を表現する要素である。また、データの変更をビューに通知するのもモデルの責任である(モデルの変更を通知するのにObserver パターンが用いられることもある)。 引用元: https://ja.wikipedia.org/wiki/Model_View_Controller
設計の3階層を意識したディレクトリ構成です。
https://github.com/hukusuke1007/flutter_app_template/tree/main/layer_first
**- model
- entities
- use_cases**
- fetch_latest_app_version.dart
- sign_in_with_email.dart
- sign_up_with_email.dart
- user_me_controller.dart
- ...
**- repositories**
**- presentation
- pages**
- onboarding_page.dart
- sign_up_page.dart
- sign_out_page.dart
- ...
**- widgets**