Flutterと単方向データフローについて
はじめに
自分自身はWebエンジニア出身でFlutterでの開発経験はほぼ皆無なのですが、個人的に最近Flutterの勉強を始めています。
Flutterのアーキテクチャについて調べている中で、単方向データフローの思想になっているかが大事という情報を見かけたのですが、iOS・Android・Flutterではまた色々事情が異なりそうだったので、軽く調査してみました。
iOS・Androidの場合
こちらの記事がとてもわかりやすかったです。双方向データバインディングについての解説で使われている図ではMVVM + Usecaseになっていますが、確かに各社の事例を調べているとよく見る構成です。
最近よく聞くJetpack ComposeはAndroidの宣言型UIフレームワークであり、強く単方向データバインディングを意識した設計になっているようで、Android公式も今ではJetpack Composeを使った単方向データフローを推奨しているようです。Androidのアーキテクチャガイドは詳しくて読むだけで勉強になりますね。
iOSアプリの方もSwiftUI/CombineやTCAが登場したことで、単方向データフローへの置き換えが着々と進んでいっているようです。
Flutterの場合
Flutterのアーキテクチャという意味ではスタンダードは特に決まっていなそうです。
ネイティブのモバイル開発者がFlutterを使うことが多いので、学習コストの観点からAndroid・iOS両方で使えるアーキテクチャとして、MVVM + レイヤードアーキテクチャの構成でFlutterも作る方向で考えているチームが多そうでした。
ただSwiftUI、Jetpack Compose、Flutterのような宣言型UIとMVVMは相性が良くない問題もあるらしく、アーキテクチャを検討する余裕があるなら、MVVM以外の構成を検討しても良さそうです。
所感
この辺りの記事は特に参考になりました。
解決したい課題意識から過不足のないアーキテクチャを考えることが大事そうですね。特にAndroidのアーキテクチャガイドはこれからのモバイルアーキテクチャで抑えておきたい原則が書かれていてとても参考になるので、熟読したいと思います。
Discussion