2014年5月19日月曜日

Windows Presentation FoundationとEntity Framework

WPF Whiteboard
WPF Whiteboard / adKinn


今年前半はWindowsアプリケーションの開発を行っています。
今回のWindowsアプリの開発ではWindows Presentation Foundation(WPF)とEntity Framework(EF)を使って開発しています。

WPFとはマイクロソフトが開発しているGUI開発基盤です。.NET Frameworkに含まれているので、WPFで開発したアプリは特別なツールをインストールしなくても使えます。

特徴としてはAngularJSでも使われている、MVVPパターンを使いロジックと画面を分離して開発ができるということです。TDDは終わったとの議論はありますが、TDDで開発している弊社としてはFormsアプリでの開発はシンドイ部分があります。素直にMVVPで開発した方が幸せになれるのではないかと思い採用しました。

約半年ほどですがWPFを使ってみての感想ですが、まず利点と思われるのは以下の通りです。
  • GUIはかなり柔軟に対応できる
  • ロジックとビューの分離はできる
  • コマンドパターンでイベント操作は容易に開発できる
  • 頑張ればViewModelもUnitTestがかける
  • htmlのcssのようにGUIにプロパティを設定できるので、全体的な変更や個別の変更などいい感じで設定できる
  • 描画がベクターベースなので、画像の拡大縮小が簡単
  • データバインディングが強力
GUIに関してはTemplate機能を使い、ListViewなどにTextblockやCheckbox等のコントロール部品を挿入する事ができるのでかなり柔軟な対応が可能です。

MVVPパターンを使用してるので、ロジック側からみたGUIはViewModelになります。ViewModelとView間のデータバインディングが機能豊富なので、ロジックとGUIがいい感じで分離できます。

次にちょっとしんどかったところですが、
  • データバンディングは自動的に行われないので、制御部分を書く必要があるのでコードの量が増える。
  • WPFはあくまでもプレゼンテーション層のフレームワークなので、XAMLコードでDIみたいな使い方はできない。
  • 真面目にMVVPを守るとダイアログメッセージを表示するだけでも結構大変
  • GUI部分は付属のBlenderはあまり使えなく、結局VS側で手動でコードする方がいい
  • 印刷のフォーマットを作るのが大変
  • 日本語の情報はあまりない
利点のところで、データバインディングがいいと書きましたが、そのデータバインディングを使いこなすまでが結構大変でした。
MVVPパターンは過去にAngularJSで使用していたので、同様にViewModelのプロパティを変更したらViewが再描写されるとばかり思っていました。
しかし、WPFでは自分でプロパティが変わったことをViewに通知しなければなりません。
はじめはエラーメッセージが何故表示されないのか悩みました。再描写が必要なプロパティに制御コードを書く必要があり、コーディングの量は多くなります。

VisutalStudioに付属しているBlenderというソフトで簡単に画面作成ができると思っていたのですが、やはり細かい設定ができないし、勝手にタグを追加してしまうので、使わなくなりました。結局手動でタグを打ちました。

日本では使われないのでしょうか、あまり日本語の情報はありませんでした。なので海外サイトを検索しまくることになりました。StackoverFlowがなければエラい事でした。

使用してみての感想はやっぱり後発のフレームワークだけあって良く出来ていると思います。Windowsでの開発はちょっとと思っていましたが、WPFでの開発ならばちょっとは幸せになれるのではないでしょうか。

長くなってしまったので、EFは次回にします。