93992
Flutterで以下の記事を参考にしてmvvm + repositoryパターンを採用してアプリを作成しようとしています。

[Flutter を MVVM
で実装する](https://wasabeef.medium.com/flutter-%E3%82%92-mvvm-%E3%81%A7%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B-861c5dbcc565)

現状のぶつかっている問題として、ビジネスロジックが複雑になった場合にview_modelかmodelどちらにrepositoryを書くべきかどうかについて悩んでいます。

コードで簡単に表すと以下になります。どちらを採用する方が望ましいですか？  
個人的にはレイヤーがシンプルになるという意味で1の方がいいと思いました。

#### 1\. repositoryをmodelに書く場合

```

    // view
    ElevatedButton (
     onTap: () {
      A().fetchApi();
     }
     child: Text('検索します。'),
    )
    
    
    // view_model
    class AViewModel extends ChangeNotifer {
      void fetchApi() {
        AModel().getApi();
      }
    }
    
    // model 
    class AModel {
      ApiInfo getApi() {
         if (Aflag && !Bflag) {
          ARepository().getApi();
        }
      }
    }
    
    // repository
    
    class ARepository {
      ApiInfo getApi() {
      // Apiを叩く
      // 取得したAPIをApiInfo型に変換
      
      return apiInfo;
      }
    }
    
    
```

#### 2\. repositoryをview_modelに書く場合

```

    // view
    ElevatedButton (
     onTap: () {
      A().fetchApi();
     }
     child: Text('検索します。'),
    )
    
    
    // view_model
    class AViewModel extends ChangeNotifer {
      void fetchApi() {
        isHitApi = AModel.isHitApi();
        if (isHitApi) {
         ARepository.getApi();
        }
      }
    }
    
    // model 
    class AModel {
      bool getApi() {
         // これを複雑なロジックとします。
         retrun Aflag && !Bflag;
      }
    }
    
    // repository
    
    class ARepository {
      ApiInfo getApi() {
      // Apiを叩く
      // 取得したAPIをApiInfo型に変換
      
      return apiInfo;
      }
    }
    
```
CC BY-SA 4.0
2023-02-22T08:28:04.180
93955
2023-02-25T04:43:41.917
2023-02-25T04:43:41.917
3060
36424
question
flutter dart mvvm
mvvm + repositoryパターンでビジネスロジックが複雑になった場合、repositoryをview_modelかmodelどちらに書くべきなのか
1の方が良いような気がするが、状況によっては2もありかも。  
2でもいいと感じるのはrepositoryパターンがデータアクセスの隠蔽化と考えるとmodelの一種ともとらえられることができるから。

というような感じかな。  
この局所的な情報だけだと、断定は難しい。

> view_modelかmodelどちらにrepositoryを書くべきかどうかについて悩んでいます。

ViewModelとrepositoryクラスの関係性を持っていいのかという質問になるのかな。

設計の方法論の一つとしてMVVM等があると思ってるので、全体の仕様、設計、プロジェクトの構成、設計規範、実装規範などなどを総合的に判断して、実装時にどのクラスにどのような責務をあてはめるのかということになる。

多分、絶対の正解はない問題だと思います。
CC BY-SA 4.0
2023-02-25T04:02:05.457
93992
2023-02-25T04:02:05.457
54446
93955
answer