かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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を繋ぐためのコードを書いてしまってもいいんじゃないんだろうか?
そう、モヤモヤしてたりします。

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