この記事は間違いを含んでいるので注意! 最新の情報は[訂正記事](https://qiita.com/FORTE/items/8bbbe732489f0e2e457d)を参照してください。
前回の最後に以下のように書きました。
ViewModelはこのアクティビティのJavaファイルの事なのか、
他にオブジェクトを作ったほうが良いのか…。
こういうのが書いてある資料が無い(あるいは見つからない)んだよなぁ…。
これが気になったのでちょっと調べてみました。
結果、こんな感じの設計(構成)にしようかなぁと思ったのでアウトプット。
(これで良さげだけどデメリットが有るのかはよくわからない…)
まぁもっとモダンなやり方はあるのだろうけど、
勉強段階なので出来れば基礎からいっときたいなーと思っている。
結論
ViewはXAML
ViewModelはActivity
ModelはActivity以外のJavaが当てはまる。
参考記事を基に以下の実装とする。
ModelLocatorを生成してModelを保持する。
ModelとViewController間はObserverパターンで実装する。
ViewModelが観察者(Observer)、
Modelが被観察者(Subject)。
-
ユーザーからの操作(ボタン押下とか)
ViewModelのイベントハンドラで(必要があれば)Modelに更新要求を出す。
Modelは更新要求を処理して結果を通知する
(ViewModelの生成時に監視先のModelに通知先としてViewModel自身をセットする) -
Modelからの通知
例えば異常時にModelからViewに通知する
このときActivityが死んでいればそこには通知は出さない
(Activityが死んだ時に削除通知をModelに出すので通知するときには通知対象から消えているハズ)
と、ここまで参考資料で調べて、
これだとデータ保存時とかにViewModelからModelにデータを渡すやり方とか、
取得したデータを返す方法がわからず…うーん。
引数で渡すのは密結合すぎる気がする。
もう少し調べないとダメっぽい。
参考記事
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
IOS/Androidアプリの3つの大事な設計方針