Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

WPF with Prism6に挑戦

販売管理システムのデモを求められており、昔に作ってお蔵入りしたWPFベースのアプリを元にPrismを使って移植手術することにした。Windowsフォームで新しいアプリを作る気になれなかったし、WPFはMVVMと画面遷移がピタッとハマれば作りやすいと感じた。

オレオレ実装で死んだあの日

昔に作ったのは確か2年以上前。オレオレ実装で適当にやったことで、以下の問題が発生した。

  • ビューがめっちゃ重い
  • MVVMの挙動が一致しない
    • フレームワークを使わなかった
    • Viewの状態がリフレッシュされず、変な挙動があった

キーイベントを包括的に拾えるっぽい

オレが不勉強だった。WPFにはビヘイビアという機能があり、UIEement(例えばTextBox)に共通のキーイベント等の処理をフックすることができる。これがあればUIのコンポーネント化が加速でき、同じTextBoxだけど何らかの分類をすることで、ビヘイビアの有無を切り替えることもできると思われる。それだけでいいんです。マジで。

オレオレMVVMはやらない

Prismがよくわからなくて、ViewModelの作り方やコードビハインドからの呼び出し方、画面遷移等の設計がGDGDだった。MVVMもオレオレでやってしまった。今回は画面構成・遷移・MVVMを全てPrismのアーキテクチャに乗っけて作ってみることにする。

Prismのサンプルプロジェクトやかずきさんの自習レポジトリを見てみると、おおよその流れはわかった。クラスライブラリとしてViewをインジェクションできるModuleという機能を使うとDDLで組み込めるらしいので、プレコンパイル済のJSPのような感じで画面のロードが速くなってくれたら嬉しい。動的にViewを差し替えるアーキテクチャが最適化されている香りがする。

github.com
github.com

ViewModelの所もかなり簡単で、規則に沿ってViewModelを作れば勝手にDataContextに該当のViewModelがインジェクションされる。MVVMやるのが簡単になってるね。

Reactiveにどこまできるのか

ReactiveProgrammingを加速するライブラリもあるそうだ。最大の課題は、DataGridViewにバインドしたObservableCollectionの中身のオブジェクトの変更を検知する仕組み。Prismではないと思うから、その辺りに実績のあるライブラリ無いかな。RxJava的な。

Funcition Key 対応

これは絶対言われる気がするので、ちょっと考える。

WindowsFomで作るのめんどくさすぎる

レスポンシブに対応しようとして、TableLayoutなどを使ってみたはいいけど、やっぱり絶対配置文化なのでだるすぎる。TableLayoutのカラムは1つのアイテムしか登録できないと知って、諦めました。ボタンのUIを変えるのもWPFよりすごく面倒。Windowsフォームの弱点をWPFが解決しているのは確かなので、しっかり勉強し直して作り直すぞ〜。