More Related Content
ODP
PPTX
PDF
PDF
PPTX
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発 PPTX
PDF
PPTX
BuildKitによる高速でセキュアなイメージビルド What's hot
KEY
PDF
PDF
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法 PDF
PDF
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは PDF
PDF
フロー効率性とリソース効率性、再入門 #devlove #devkan PDF
PPTX
世界一わかりやすいClean Architecture PDF
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021 PDF
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料) PDF
WebAssemblyのWeb以外のことぜんぶ話す PDF
PDF
Unity開発で使える設計の話+Zenjectの紹介 PDF
PDF
PDF
PDF
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する PDF
PDF
40歳過ぎてもエンジニアでいるためにやっていること Similar to 塹壕よりLivetとMVVM
PPTX
T119_5年間の試行錯誤で進化したMVPVMパターン PPTX
PDF
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern PPTX
PDF
PPTX
PPTX
PDF
PDF
これからはじめる XAML - WPF プログラミング PDF
PPTX
Visual studio 2013 Overview PDF
MAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT apps PDF
Introduction for Browser Side MVC PPTX
PPTX
Visual Studio による開発環境・プログラミングの進化 PPTX
Prism for windows runtime入門 PDF
Prism + ReactiveProperty入門 PDF
Picture Superiority Effect 画像優位性効果 PPTX
Blue monkey architecture overview PPTX
Visual Studio Online BUILD を本気で使いこなして品質&効率を劇的に上げる! [ Comm Tech Festival ] C-4 More from Hiroshi Maekawa
PDF
新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜 PDF
PDF
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー PDF
第8回大阪Jenkins勉強会LT: iOS vs CI PDF
Visual Studio Online as a CI Service PDF
Travis, Circle そして Jenkins 2.0 PDF
PDF
Getting Start with React Native PDF
「価値探索」がつないだクライアントと開発者の絆 PDF
「価値探索」がつないだ
クライアントと開発者の絆
〜Craful開発チームの60日〜 PDF
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜 PDF
PDF
PDF
PDF
PDF
テストって何をするもの? - テストの5W1H - PDF
PDF
PDF
テスト自動化のパタンランゲージ@Agilet Tour Osaka PDF
塹壕よりLivetとMVVM
- 1.
- 2.
お前だれよ?
• まえかわ ひろしです
• a.k.a @Posaune / posaunehm
– ちなみにPosauneは独語でとろんぼーん。
• いるところ
– Twitter
– Blog:http://posaune.hatenablog.com/
– Github:https://github.com/posaunehm/
わんくま同盟 大阪勉強会 #50 2
- 3.
なにもの?
• 一介のC#好き(メーカー所属)です。
–XAML >>>越えられない壁>>>Winform
– F#も素敵ですよね。
• アジャイル界隈のほうがよく見かけます
– 京都アジャイル勉強会(#京アジャ)
– TABOK勉強会 関西 (#tabokjp)
– あとはTDD界隈とか、CI界隈とか
わんくま同盟 大阪勉強会 #50 3
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
WPF導入まで
• UI改善の大号令 →デザイナが本気を出す
→ なんかPhotoshopみたいなデザインに
→ 偉い人が気に入ったっぽい→ ナニコレ…
→ WPFだと作れるらしいよ(`・ω・´)
• 2009年∼2010年くらいの技術を基盤に
– WPF 3.5
– 当然Livet以前。というか色々以前。
わんくま同盟 大阪勉強会 #50 11
- 12.
- 13.
MVVM???
• 当時のリソース
•2009年2月のMSDNマガジン:http://
msdn.microsoft.com/ja-jp/magazine/dd419663.aspx
– ライブラリはまだ少なかった
• Prism, MVVM Lightはあったけど・・・
– 情報不足、知識不足。
– なのでとりあえずMSDNマガジンを必死で解読
した
わんくま同盟 大阪勉強会 #50 13
- 14.
- 15.
- 16.
- 17.
- 18.
ハマった・・・
• V:VM:M =1:1:1は有り得ない!!
– でもV:VMがn:mになるのは特に問題はない(バ
インディングがよろしくやってくれるので)
– VM : Mがn:mになって詰んだ
• VM肥大化症候群に感染
– 症例①:M → VM
– 症例②:V → VM
わんくま同盟 大阪勉強会 #50 18
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
View → ViewModelへの肥大化
•えーっと、コードビハインドはMVVMだと絶対に書いちゃ
いけないんだよね・・・
• んじゃ、図形をドラッグして、移動させて回転させ
て・・・とかも、VMにXPosとかYPosとかWidthとか
Heightとかつけて
• イベントハンドラからVMに処理を投げて・・・
• ・・・マジでややこしすぎて死ぬので注意。やったらダ
メ、ゼッタイ。
わんくま同盟 大阪勉強会 #50 24
- 25.
最初の導入で起こったこと
• ViewModelの肥大化・巨大化
–Model、View双方から処理がしみだしてきた
– 何が困る??
• Viewがしみだすと、単体テスト性が落ちる落ちる
• Modelがしみだすと、変更管理がえらく大変に
• 結局、処理境界が明示できないのはよくない
• ちなみに、当初の目標デザインは普通に達成
– デザイナさんとペアプロっぽいこともしたり
– WPFのUI自由度はもっともっと評価されるべき
わんくま同盟 大阪勉強会 #50 25
- 26.
- 27.
- 28.
- 29.
- 30.
Model再考
• 影響を受けたもの
–Livet(ver 0.9x)
• Modelに提供された更新通知
– ドメイン駆動設計
• レイヤーアーキテクチャ
– UI
– アプリケーション
– ドメイン
– インフラストラクチャ
わんくま同盟 大阪勉強会 #50 30
- 31.
私のModel理解
• Livetで推奨されているように、Model層は更新通知を
持つべき
– Observer形式はカオスになりがち
• DDDでのドメイン層がMVVMのModelに該当する
– データクラス(エンティティ)はModelの最下層
– 最外側にあるクラスにはLivet準拠のModelにする
• ならばViewModel = アプリケーション層?
– 個人的には、否。ViewModelはあくまでUI層。
– アプリケーション層はModelの最上層に属する
わんくま同盟 大阪勉強会 #50 31
- 32.
- 33.
ViewModelは?
• ViewModelは描画に必要なデータのアクセサ/ストア
–描画時のみに用いるデータ以外は実体をModelに移す
• 処理も右から左へ流すだけ。各モデルの協調処理は
アプリケーション層の仕事
• じゃあ何のためにいるの??
– ユニットテストをするため!
• UIに極力近いレベルで書けるので、シナリオテストができる
– Automation的なことをする場合にも役に立ちますよ
わんくま同盟 大阪勉強会 #50 33
- 34.
- 35.
- 36.
というわけで方針
• Model層もアップデート通知有り。
–Livet使う!
– ViewModel間の協調動作は極力なしで。
• ややこしい動きをするUIはカスタムコント
ロールとして切り出す
– 適切なプロパティを公開し、Bindableに
– 汚いことは極力内部だけで解決する。
わんくま同盟 大阪勉強会 #50 36
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
TDD(ユニットテスト)の観点から
• 最上位のUIシナリオを記述できるのはやはり強力
–継続的インテグレーションのお供に
• 逆に、VMを書くときは、「それが外部からちゃんとテストでき
るか」を意識すると◎
– ViewModel内でモーダルダイアログやメッセージボックス出してない
よね??
– それらを抽象化するMessenger機構は、テストでこそ真価を発揮す
る!
• VM層を使ったらBDD綺麗に書けそうじゃない??
– (宣伝)*Spec勉強会やります
– NaturalSpecやろうよ!
わんくま同盟 大阪勉強会 #50 43
- 44.
まとめ
• 分かって欲しかったこと
–MVVMのハマりどころ
• ViewModelの肥大化を防ごう
– Livetの美味しさ
• MVVMへの適合度が高くて楽しい
– MVVMの持つ力
• 画面とロジックの分離しやすさ
• 単体テスト実行上のメリット
わんくま同盟 大阪勉強会 #50 44
- 45.