かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Model View ViewModel(MVVM)パターンでモヤモヤ

MVVMパターンで、ViewModelにCommandをプロパティでViewに公開して、ViewでCommandをバインドするというのがスマートな感じなんですが、Commandを定義しようとすると、ViewModelのコードがごちゃごちゃしてくるような気がします。
たとえば

private DelegateCommand hogeCommand;
public DelegateCommand HogeCommand
{
  get
  {
    return hogeCommand = hogeCommand ?? new DelegateCommand(Hoge, CanHoge);
  }
}
public void Hoge()
{
  // do something
}
public bool CanHoge()
{
  // do something
}

みたいなコードの塊が、Commandの数だけずらっと並びます。最近の超個人的な感覚だとViewModelは

public void Hoge()
{
  // do something
}

だけ定義して、Viewのコードビハインドのイベントハンドラあたりで

private void button1_Click(object sender, EventArgs e)
{
  this.Model.Hoge();
}

と書くほうが、インテリセンスも効いて開発しやすいんじゃないんだろうかと思うようになってきました。
MVVMで組んでると、コードビハインドに処理を書いたら負けみたいな考えに陥ってしまうこともありますが、割り切ってViewとViewModelを繋ぐためのコードを書いてしまってもいいんじゃないんだろうか?
そう、モヤモヤしてたりします。

実際、どう作るのが楽で現実的なんだろうか。まだまだ、考えないといけないなぁと思う今日この頃でした。