株式会社NeverのFlutter設計では3層構成 Presentation → Domain → Infrastructure を基本とした軽量DDDライクな設計を採用する。

デメリットよりメリットの方が大きいのですぐリカバリーできる

※設計にはこれが正解というものはありません。設計がビジネス要件とマッチしているかが重要だと考えています。本設計をベースとして大きく乖離しない程度にルールや指針を柔軟に決めれば良いと考えています。

設計

株式会社Neverのアプリ設計指針.png

※ Modelの概念はMVCから引用しています

モデルはそのアプリケーションが扱う領域のデータと手続き(ビジネスロジック - ショッピングの合計額や送料を計算するなど)を表現する要素である。また、データの変更をビューに通知するのもモデルの責任である(モデルの変更を通知するのにObserver パターンが用いられることもある)。 引用元: https://ja.wikipedia.org/wiki/Model_View_Controller

ディレクトリ構成

LayerFirst

設計の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**