🦦

Flutter【riverPod(MVVM+repository+state)】

2022/06/29に公開約2,500字

そろそろriverPod に関しても記事を投稿しよう!と思っていたのですが、
パワーいるんで全くやる気起きなかったんです。すみません。。

筆者はhookRiverPod利用してます。

※我流ソフトアーキテクチャー(MVVM+repository+state)
ディレクトリはこんな感じです。

全てをのディレクトリをご紹介すると過酷なので抜粋します。

・view層

componentとScreenでまた階層分けを行っています。
Screenでは極力、HookConsumerWidgetや StatefulHookConsumerWidgetを利用せず、ボタンなど細分化したwidgetで上記を利用したり、部分的にHookConsumerを利用しております。

・model層(データモデルfreezed※fromJson有)

api利用時のresponsbodyのfromJsonなどはこっちのデータモデルを利用します。
後は何かしらのデータモデル

・state層(freezed)

provider層やviewModel層でStateNotifierProvider化する際のStateを管理しています。
model層で作成したデータモデルクラスをstateにします。
※基本的にはここではfromJsonは行いません。

・api層(Provider.autoDispose)

各APiのhttpとかDio接続管理
※provider層やrepository層から参照します。viewModel層からの直接依存はNGにしてます。

・shared_preferences層(Provider.autoDispose)

ローカルデータの管理(insert,update,delete)
※provider層やrepository層から参照します。viewModel層から参照はNGにしてます。
sqliteなど増えた場合はディレクトリ層を増やします。

・repository層(Provider / autoDispose)

viewModelへの橋渡し役です。
1対多になります。

provier層とviewModel層+repository層の違い

・provider層(Provider or StateProvider or StateNotifierProvider /.autoDispose)

providerやStateProivder,repository層で複数の参照がない場合のStateNotifierProvidr(apiのみやshared_preferencesの1対1)を管理してます。
非同期だったらAsyncValueも使用します。

・viewModel層(StateNotifierProvider / autoDispose)

非同期だったらAsyncValueも使用します。
provier層の1対1ではなく1対多(repository)対多(apiやshared_preferences)構成。
ViewModelで複数のrepositoryを利用できるようにしております。

1.apiでデータを取得し、保存。(クレデンシャルトークンとか、ログインした際のログイン情報とか)

2.ローカルに保存しているデータを参照し、api通信。(クレデンシャルトークンとかAPIKEYとか)

3.repositoryを複数参照してデータを取得したい場合。

・個人的ルール

1.同層内での利用に関して
viewModelからviewModelを呼び出すとか、provider層内で互いを呼び出すのは基本的にやめております。 ※provider層で使い回す定数系にしたものなどは別。

2.autoDisposeは必要 
基本的にviewModel → repository → api 全てにautoDisposeしているので不要になったら全て破棄させるようにしています。※一概に正しいとは言えない、保つ場合もあります。

3.FutureProvider / StreamProvider / ChangeNotifierProvider
基本的に上記は利用しておりません。
FutureProvider →  StateNotifierProvider(AsyncValue)で代用
StreamProvider →利用しなくてもなんとかなりました。
ChangeNotifierProvider →notifyListeners()ではなくStateNotifierProviderのstateの状態管理で対応。

・記事を作成しての感想

とりあえず今回は概要だけにまとめました。ソースコードは反響あればまた頑張ります。
自身が全て正しいとは到底思っておりませんので、皆さんご意見ご感想あれば感謝致します!

以上、皆さんのお役に立てれば幸いです!

2022年6月末 
沖縄は土地が高いからどっか移住制度が充実した県外に引っ越してリモートに夢を感じる日々です。

Discussion

ログインするとコメントできます