[Flutter]MVVM
最近 Flutter を触る機会があって、 MVVM について調べたのでまとめていきたいと思う。
大枠は Wiki とマイクロソフトの記事で、細かいところは複数記事を読んでみた個人的な理解。
MVVM
UI と ビジネスロジックを分離し、View が特定の Model に依存しないようにするソフトウェアアーキテクチャパターン。
View は ViewModel を「知っており」、ViewModel は Model を「知っている」が、Model は ViewModel を知らず、ViewModel も View を知らない。
つまり、View は ViewModel の参照を持っている、ViewModel は Model の参照を持っているが、その逆はないということ。
Wiki より
Model
ドメインモデル、またはコンテンツを表すデータアクセスレイヤー
View
ユーザーが画面上で見るものの構造・レイアウトを表す。
ユーザーと View のインタラクション(クリックとか)を受け取って、View と ViewModel を結びつけるために定義されたデータバインディングを介して ViewModel に送る
ViewModel
パブリックプロパティとコマンドを公開する View を抽象化したもの。
オブジェクトをかんたんに管理・表示できるようにモデルからデータオブジェクトを公開(変換)する値変換器
View の表示ロジックを全てではないがほとんど処理する。
View に対して一つ定義するという記事と複数定義して使い回すという記事がある。
いろいろ読んだ感じだと規模によって分けている感じがする。プロダクトが大きいものだと複数定義して、複数の View で使いまわしてる。小さいものであれば View に対して一つ定義して、必要なものをそこに置くという感じ。
Discussion