MVVM パターンを使用していくつかのプロジェクトを実行した後、私はまだ ViewModel の役割に苦労しています。
過去に行ったこと: モデルをデータ コンテナーとしてのみ使用する。ViewModel でデータを操作するためのロジックを配置します。(それがビジネス ロジックですよね?) 短所: ロジックは再利用できません。
私が今試していること: ViewModel をできるだけ薄く保つ。すべてのロジックをモデル レイヤーに移動します。ViewModel にはプレゼンテーション ロジックのみを保持します。短所:モデルレイヤー内でデータが変更された場合、UI通知が非常に苦痛になります。
したがって、より明確にするために例を示します。
シナリオ: ファイルの名前を変更するツール。クラス: File : 各ファイルを表します。ルール: ファイルの名前を変更するロジックが含まれています。
アプローチ1に従っている場合:ファイル、ルール、およびビューのViewModelの作成-> RenamerViewModel。すべてのロジックを RenamerViewModel に入れる: FileViewModel と RuleViewModel のリストと、先行するロジックを含みます。簡単で高速ですが、再利用できません。
アプローチ2に従っている場合:新しいモデルクラスの作成->ファイルのリストを含むリネーム、ルール、および各ファイルを相互に処理し、各ルールを適用する進行中のロジック。File、Rule、Renamer の Viewmodel を作成します。現在、RenamerViewModel には Renamer Model のインスタンスと、Renamer のファイルとルール リストをラップする 2 つの ObservableCollections のみが含まれています。しかし、ロジック全体は Renamer モデルにあります。そのため、Renamer モデルがメソッド呼び出しによって一部のデータを操作するためにトリガーされた場合、ViewModel にはどのデータが操作されるかの手がかりがありません。モデルには PropertyChange 通知が含まれていないため、それを回避します。そのため、ビジネス ロジックとプレゼンテーション ロジックは分離されていますが、これにより UI への通知が難しくなります。