ModelをViewModelが作成するべきか?
時々見かけるMVVMコードのサンプルで, ↓のようなものがあります.
MyViewModel.cs
public MyViewModel
{
MyModel _Model;
public MyViewModel()
{
// モデルのインスタンスを生成
_Model = new MyModel();
}
}
ただ, 自分的には違和感ありあり...
何が(自分的に)おかしいと感じるか
「ViewModelってModelの影な筈なのに, なんでModelがViewに依存しとんねん...」
どのような場合に問題か
異なるModel同士でやりとりしたい場合, Modelを参照するためにViewModelを作ることになります
→なんでModelがViewModelに依存してるねーん
また, 例えば, バックグラウンド(=Viewが無いときに)実行するためにはWindow(=View)を作らなければなくなります.
→なんでModelが(ry
どうするか
自分が良くやるのがSingletonクラスにModelをもたせる方法
Workspace.cs(Model層)
public Workspace : Singleton
{
public static Workspace Instance
{
....
}
public Model MyModel {get; private set;} = new MyModel();
}
MyViewModel.cs
public class MyViewModel
{
MyModel _Model;
public MyViewModel()
{
_Model = Workspace.Instance.Model;
}
}
もちろんVisualStudioなどのIDE上では, プロジェクトファイル(ソリューションンファイル)ごとに関心のあるWorkspaceを作るなど, Modelを正しく分割する工夫は必要です.
ViewがModelを作っても問題ない場合
シリアライズする気も他Modelとの連携もなく, Windowが出ている時だけ編集したいデータ(Viewの寿命とほぼ同じ寿命のModel)ならあまり問題ない気がします.
反論・反例あればご意見頂ければ幸いです.