🙆

MVVM+Repositoryのレイヤーファーストかフィーチャーファースト

2024/03/13に公開

こんにちは。タオルです。

MVVM+Repositoryのレイヤーファーストパターン

/lib
  /models
    - user.dart
    - post.dart
  /views
    - home_page.dart
    - detail_page.dart
  /viewmodels
    - home_viewmodel.dart
    - detail_viewmodel.dart
  /repositories
    - user_repository.dart
    - post_repository.dart
  /services
    - api_service.dart
    - database_service.dart
  /widgets
    - custom_button.dart
    - custom_card.dart

MVVM+Repositoryのフィーチャーファーストパターン

/lib
  /features
    /login
      /models
        - login_model.dart
      /viewmodels
        - login_viewmodel.dart
      /views
        - login_page.dart
      /repositories
        - login_repository.dart
    /profile
      /models
        - profile_model.dart
      /viewmodels
        - profile_viewmodel.dart
      /views
        - profile_page.dart
      /repositories
        - profile_repository.dart
  /services
    - api_service.dart
    - database_service.dart
  /widgets
    - custom_button.dart
    - custom_textfield.dart

おまけ①
ドメイン駆動設計(DDD)ベースのアプローチ

/lib
  /domain
    /entities
      - user.dart
      - post.dart
    /repositories
      - user_repository.dart
      - post_repository.dart
    /services
      - authentication_service.dart
  /application
    /viewmodels
      - home_viewmodel.dart
      - detail_viewmodel.dart
  /infrastructure
    /data_sources
      - api_service.dart
      - database_service.dart
  /presentation
    /views
      - home_page.dart
      - detail_page.dart
    /widgets
      - custom_button.dart
      - custom_card.dart

おまけ②
クリーンアーキテクチャベースのアプローチ

/lib
  /core
    /errors
    /use_cases
    /entities
  /features
    /feature1
      /data
        /models
        /datasources
        /repositories
      /domain
        /entities
        /repositories
        /usecases
      /presentation
        /viewmodels
        /pages
        /widgets
    /feature2
      ...(feature1と同様の構造)
  /common
    /widgets
    /services

おまけ③
マイクロフロントエンドアーキテクチャベースのアプローチ

/lib
  /core
    /base
    /services
  /modules
    /module1
      /data
        /repositories
      /domain
        /usecases
      /presentation
        /viewmodels
        /screens
        /widgets
    /module2
      ...(module1と同様の構造)
  /shared
    /widgets
    /utils

Discussion