Serviceを読んで理解し、同意したものとみなします。1,343件41現在MVVMパターンでアプリを開発しているのですが、色々と調べたりコードを書いたりしても分からないところがあるので質問させていただきたいです。サンプルで以下に自分なりにMVVMパターンを使用したごく簡単なコードを書いてみました。init];としか書かれていないのですが、ViewModel内でUIの操作をしたいときにいちいち関数の引数にselfを書くのは冗長なのではないかなと思ったからです。XXXXXX]という形で一行だけになっていくのでしょうか?分からないことが多々あり、勘違いしたまま質問をしているかもしれませんが、どなたか詳しい方がいれば教えていただきたいです。すみませんが、よろしくお願いします。initWithSelf:self];という(中略)やり方は正しいやり方でしょうか?根本的な間違いだ。ViewModelからViewは操作しないViewModelはViewへの参照を持たない加えていうと、お前のコードでは循環参照になっているそしてinitWithSelfが実行されると各変数を初期化していくのですが、このイニシャライザ内でNSArrayを初期化するのは正しいやり方でしょうか?このNSArrayのitemsが表示したいデータのソースならここも根本的に間違いだ。itemsはModelに分類されるデータソースだViewModelは絶対にModelを保持しない。ViewとViewModelの関係以前にViewとModelを分離するからだだからその段落のこれ以降の質問が意味を成していない。モデルの初期化はViewにもViewModelにもさせず別の場所でやれ。ViewはViewModelのメソッドを呼び出すのが主な仕事になるのか」と解釈して答える。基本的にはプレゼンテーションの範囲に限りYESだが、ViewはViewModelに問い合わせた結果をアプリケーションの外観に適用する。以下に、単純なMVVMパターンの例を示す。今回の質問の要旨外なのでモデルは省いている。ViewController.hViewControllerは自身のためのViewModelを保持する。ViewModelは状態変更をデリゲートで通知するため、そのプロトコルを採用する。tintColor];}@endViewModel.hViewModelは状態変更の通知先としてデリゲートを参照する。これは本来ViewModelはViewを参照しないパターンに反するが、Objective-Cの構造上よしとする。NSNotificationCenterを使用すればデリゲートで参照することなくパターンの基本に沿えることは言っておく。self.defaultColor;}@endViewはisEditing(編集中か)という状態をViewModelに問うことができる。状態に応じたtintColorを得られる。isEditingが変更されると、デリゲートを通じて担当しているViewへと通知される。Viewは状態変更を自身のもつUI要素へ反映する。このように、状態の管理とそれに応じた外観要素を適切に提供することと、それをViewから分離するのがViewModelの仕事の一つだ。モデルが持つデータソースをプレゼンテーションに適した形に整形する仕事もあるが、ここでは割愛する。最後に、大前提だがデザインパターンはあくまでも雛形だ。実際の要件次第で実装は変化する。デザインパターンを導入する目的そのものを忘れんな。23:34user10678user10678ご回答ありがとうございます。根本的に考え方が間違っていたのですね。おかげさまでModelとViewとViewModelの役割が分かり、その上でサンプルのコードと合わせて考えていくと各担当の連携の仕方がわかりました。誠にありがとうございました。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。ユーザが起動するアプリを抑制したい。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。