SlideShare a Scribd company logo
1 of 45
塹壕よりLivetとMVVM
    @Posaune




    わんくま同盟 大阪勉強会 #50   1
お前だれよ?
• まえかわ ひろし です
• a.k.a @Posaune / posaunehm
  – ちなみにPosauneは独語でとろんぼーん。

• いるところ
  – Twitter
  – Blog:http://posaune.hatenablog.com/
  – Github:https://github.com/posaunehm/


                わんくま同盟 大阪勉強会 #50           2
なにもの?
• 一介のC#好き(メーカー所属)です。
 – XAML >>>越えられない壁>>>Winform
 – F#も素敵ですよね。

• アジャイル界隈のほうがよく見かけます
 – 京都アジャイル勉強会(#京アジャ)
 – TABOK勉強会 関西 (#tabokjp)
 – あとはTDD界隈とか、CI界隈とか

           わんくま同盟 大阪勉強会 #50    3
さて本題。



 わんくま同盟 大阪勉強会 #50   4
タイトルの元ネタ
• 塹壕よりScrumとXP
 – Agileの日本語書籍として
  最初に読むべきPDF
 – フリーだよ!!
 – (宣伝)興味があれば
  #京アジャ へ

 –How we do Scrum
            わんくま同盟 大阪勉強会 #50   5
How We Do MVVM



    わんくま同盟 大阪勉強会 #50   6
今日はなす事
• 何もわからないままWPFを業務導入して
• とりあえずの設計パターンてことでMVVMを検討して
• 実装して、痛い目にあって
• 二度目のプロジェクトで色々試行錯誤した末に
• Livetに出会っていろいろ思うことがあって
• でもまだ模索中で


• そんな話をします。


             わんくま同盟 大阪勉強会 #50   7
おことわり
• 本日の話は、あくまで個人が思ったことで
す。
• 間違い・勘違い・思い違い、色いろあると
思います。ツッコミ大歓迎。
• 頭からの否定・肯定はやめてね!!
• こわくないよ!


        わんくま同盟 大阪勉強会 #50   8
Agenda
• イントロ
• はじめての挑戦
• 二度目のリベンジ
• 別の世界から眺めてみて




         わんくま同盟 大阪勉強会 #50   9
はじめての挑戦



  わんくま同盟 大阪勉強会 #50   10
WPF導入まで
• UI改善の大号令 → デザイナが本気を出す
 → なんかPhotoshopみたいなデザインに
 → 偉い人が気に入ったっぽい→ ナニコレ…
 → WPFだと作れるらしいよ(`・ω・´)
• 2009年∼2010年くらいの技術を基盤に
 – WPF 3.5
 – 当然Livet以前。というか色々以前。


         わんくま同盟 大阪勉強会 #50   11
さて、WPF
• とりあえずデザインはデザイナさんからAI
データでもらうとして・・・
• 設計はどうする??
 – 元ソフト(C++/MFC : Doc-Viewアーキテク
  チャ)のロジックを受け継ぐ必要あり
 – なんかWPFではMVVMってのが流行りらしい
  よ?


           わんくま同盟 大阪勉強会 #50       12
MVVM???
• 当時のリソース
 • 2009年2月のMSDNマガジン:http://
  msdn.microsoft.com/ja-jp/magazine/dd419663.aspx
 – ライブラリはまだ少なかった
   • Prism, MVVM Lightはあったけど・・・

 – 情報不足、知識不足。
 – なのでとりあえずMSDNマガジンを必死で解読
  した

                 わんくま同盟 大阪勉強会 #50                   13
こんな感じの理解
• とりあえずViewとViewModelをバインディ
 ングとコマンドでつなぐらしい
 – 単体テストも便利になるらしい
 – IDataErrorInfoとかを使うともっと幸せになれ
  るらしい

• ViewとViewModelは一対一で対応かな?
• Modelはなんかデータの置物っぽいね。

           わんくま同盟 大阪勉強会 #50       14
こんな感じの理解




・とりあえず3つに分けて・・・
・Viewはまとまりで切り出して・・・
・対応するVMとMを作ればいいのか!




              わんくま同盟 大阪勉強会 #50   15
こんな感じの理解




・ViewからはなんかCommandとかいうものでViewModelに操作を伝えて…
・ViewModelでそれを処理するんだよね。んでModelのデータを触ると。
・んで変更したプロパティを通知するとふしぎぱわーで更新できるのか。


               わんくま同盟 大阪勉強会 #50              16
まだつっこまないでね!!




    わんくま同盟 大阪勉強会 #50   17
ハマった・・・
• V:VM:M = 1:1:1は有り得ない!!
 – でもV:VMがn:mになるのは特に問題はない(バ
  インディングがよろしくやってくれるので)
 – VM : Mがn:mになって詰んだ

• VM肥大化症候群に感染
 – 症例①:M → VM
 – 症例②:V → VM


           わんくま同盟 大阪勉強会 #50   18
① VM:Mがn:mになって死ぬ
• 表示のバックエンドに過ぎないVMとModel
 が同じ構造してくれるわけない
 – 普通はVMは複数のModelを持つ
 – Modelは複数のVMによって共有もされる

• ほとんどのサンプルはV:VM:M = 1:1:1の構
 造なので誤解を生みやすい



          わんくま同盟 大阪勉強会 #50     19
① VM:Mがn:mになって死ぬ




誰かが「何がどう変わったか」を通知しなければいけない


         わんくま同盟 大阪勉強会 #50   20
解決策:VMが頑張る
• 自分の操作によってどのプロパティが変化
 するかを完全に管理する約束に
• 他ViewModelに影響を与える場合は統合
• どうしようもない場合はObserverパターン
 を導入




         わんくま同盟 大阪勉強会 #50   21
VMが頑張る図




VMは自分の操作によってModelがどう変化するかを完全に
把握する必要がある。。。

          わんくま同盟 大阪勉強会 #50   22
② VM肥大化症候群
• 一つの原因は先に説明した更新通知。
 – そもそもVMが更新通知をするということは、
  Modelの処理内容がほとんどVMにでてる

• もう一つは、Viewで解決すべき問題が
ViewModelへ渡ってしまったこと




         わんくま同盟 大阪勉強会 #50   23
View → ViewModelへの肥大化
• えーっと、コードビハインドはMVVMだと絶対に書いちゃ
 いけないんだよね・・・
• んじゃ、図形をドラッグして、移動させて回転させ
 て・・・とかも、VMにXPosとかYPosとかWidthとか
 Heightとかつけて
• イベントハンドラからVMに処理を投げて・・・


• ・・・マジでややこしすぎて死ぬので注意。やったらダ
 メ、ゼッタイ。


               わんくま同盟 大阪勉強会 #50   24
最初の導入で起こったこと
• ViewModelの肥大化・巨大化
 – Model、View双方から処理がしみだしてきた
 – 何が困る??
   • Viewがしみだすと、単体テスト性が落ちる落ちる
   • Modelがしみだすと、変更管理がえらく大変に
   • 結局、処理境界が明示できないのはよくない

• ちなみに、当初の目標デザインは普通に達成
 – デザイナさんとペアプロっぽいこともしたり
 – WPFのUI自由度はもっともっと評価されるべき
            わんくま同盟 大阪勉強会 #50    25
二度目の導入



 わんくま同盟 大阪勉強会 #50   26
二度目導入まで
• 結構なインターバルあります(一年くらい)
• その間はSilverlightをさわったり、Javascript/
 HTML5を触ったりと、わりと雑多な感じでお仕事
• 画像のフィルタリングが必要な案件で、WPFでさ
 くっとEffect作ってサンプル出したら、採用に →
 WPF二件目ktkr!
• 時代はWPF4/VS2010!
  – MVVMライブラリも充実期に。

             わんくま同盟 大阪勉強会 #50         27
一度目の反省・・・が解決しない
• ViewModelが更新をして回るのはなんかおかしい
 ぞ・・・?機能が多すぎる。
 – Model→ViewModelの更新通知はあるべき。
 – そもそもModelってなんだろう??


• 「コードビハインドを書いちゃダメ」は悪魔の言葉
 – 必要なコードビハインドだって有るだろ・・・
 – でも切り分けしとかないとカオスになりそうだしなぁ


            わんくま同盟 大阪勉強会 #50    28
そんな時にLivet発見



    わんくま同盟 大阪勉強会 #50   29
Model再考
• 影響を受けたもの
 – Livet(ver 0.9x)
   • Modelに提供された更新通知

 – ドメイン駆動設計
   • レイヤーアーキテクチャ
      – UI
      – アプリケーション
      – ドメイン
      – インフラストラクチャ


               わんくま同盟 大阪勉強会 #50   30
私のModel理解
• Livetで推奨されているように、Model層は更新通知を
 持つべき
 – Observer形式はカオスになりがち
• DDDでのドメイン層がMVVMのModelに該当する
 – データクラス(エンティティ)はModelの最下層
 – 最外側にあるクラスにはLivet準拠のModelにする
• ならばViewModel = アプリケーション層?
 – 個人的には、否。ViewModelはあくまでUI層。
 – アプリケーション層はModelの最上層に属する

            わんくま同盟 大阪勉強会 #50     31
Modelは大きいものでしょ




    わんくま同盟 大阪勉強会 #50   32
ViewModelは?
• ViewModelは描画に必要なデータのアクセサ/ストア
 – 描画時のみに用いるデータ以外は実体をModelに移す

• 処理も右から左へ流すだけ。各モデルの協調処理は
 アプリケーション層の仕事
• じゃあ何のためにいるの??
 – ユニットテストをするため!
   • UIに極力近いレベルで書けるので、シナリオテストができる

 – Automation的なことをする場合にも役に立ちますよ


           わんくま同盟 大阪勉強会 #50         33
コードビハインドの扱い




   わんくま同盟 大阪勉強会 #50   34
カスタムコントロール!
• どうしてもUI上ややこしい処理が必要な場
合は、プロパティやイベントを適切に公開
してやればいい!
 – カスタムコントロール内部はコードビハインド
  でガリガリ描画
 – 外側から見るとほぼバインディングだけで成り
  立っているようにする


        わんくま同盟 大阪勉強会 #50   35
というわけで方針
• Model層もアップデート通知有り。
 – Livet使う!
 – ViewModel間の協調動作は極力なしで。

• ややこしい動きをするUIはカスタムコント
 ロールとして切り出す
 – 適切なプロパティを公開し、Bindableに
 – 汚いことは極力内部だけで解決する。

              わんくま同盟 大阪勉強会 #50   36
Livetを使ってみて(ver.0.99)
• Livetは使えば使うほど、使い手のことを考えて作って
 いるのかが分かる。
 – 更新通知付きModel
 – Blend親和性の高いUI拡張
 – Messenger機構
• 機能をフルに活かそうとすると、MVVMが自然に身につ
 くように作ってあるんではないだろうか(想像)
• 個人的に超嬉しいのが、
 CreateReadOnlyDispatcherCollection

                 わんくま同盟 大阪勉強会 #50     37
CreateReadOnlyDispatcherCollection
• 一言で言うと、「Modelのコレクションか
らViewModelのコレクションを作る」
• XAMLではコレクション系UIをいかにうま
く使うかが勝負(だと思ってます)
 – 極論、ListViewでなんだってできる

• ただし、MVVMを真面目にやっていると
困ったことが・・・

           わんくま同盟 大阪勉強会 #50          38
Collectionの変換




・ModelのCollectionをViewModelのCollectionに変換
・Collectionを同期する必要があるので結構ややこしい

   CreateReadOnlyDispatcherCollectionで一発変換!


                わんくま同盟 大阪勉強会 #50              39
二度目の導入まとめ
• 設計方針は現時点では割と満足
• これから他のメンバーにどう徹底していく
かが課題
 – 実は今はプロジェクトからは一線を引いていた
  り・・・
 – 世の中からWindowsFormが消え去りますよう
  に:-P


          わんくま同盟 大阪勉強会 #50     40
別の世界から眺めてみて



   わんくま同盟 大阪勉強会 #50   41
WindowsFormから見ると
• 現在、業務はWindowsFormに先祖返り
• Bindingで自然にViewとControllerの分離がで
 きるWPFの有難味が身にしみます、はい。
• MVVMパターンを体験した後だと、「これ
 はPresenterに吐き出すべきだな」がなんと
 なく分かる
 – ※個人の感想です。一般的な効果を保(ry

           わんくま同盟 大阪勉強会 #50     42
TDD(ユニットテスト)の観点から
• 最上位のUIシナリオを記述できるのはやはり強力
 – 継続的インテグレーションのお供に
• 逆に、VMを書くときは、「それが外部からちゃんとテストでき
 るか」を意識すると◎
 – ViewModel内でモーダルダイアログやメッセージボックス出してない
  よね??
 – それらを抽象化するMessenger機構は、テストでこそ真価を発揮す
  る!
• VM層を使ったらBDD綺麗に書けそうじゃない??
 – (宣伝)*Spec勉強会やります
 – NaturalSpecやろうよ!


                 わんくま同盟 大阪勉強会 #50        43
まとめ
• 分かって欲しかったこと
 – MVVMのハマりどころ
  • ViewModelの肥大化を防ごう

 – Livetの美味しさ
  • MVVMへの適合度が高くて楽しい

 – MVVMの持つ力
  • 画面とロジックの分離しやすさ
  • 単体テスト実行上のメリット

           わんくま同盟 大阪勉強会 #50   44
最後にもう一度おことわり
• 本日の話は、あくまで個人が思ったことです。
ツッコミ大歓迎。
• そもそも設計に絶対の正解はないです。
• あえて言うなら、現場で頭を抱えてひねり出し
たものでしょう、きっと。
• でもひねり出すためには、色々なパラダイムを
知っていることが必要です。
• 今回の話がそんな時の一助となれば幸いです。
        わんくま同盟 大阪勉強会 #50   45

More Related Content

What's hot

それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?Yoshitaka Kawashima
 
ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用
ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用
ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用Sugimoto Chizuru
 
Msを16倍出し抜くwpf開発2回目
Msを16倍出し抜くwpf開発2回目Msを16倍出し抜くwpf開発2回目
Msを16倍出し抜くwpf開発2回目cct-inc
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)A AOKI
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと増田 亨
 
MVC の Model を考える
MVC の Model を考えるMVC の Model を考える
MVC の Model を考えるtomo_masakura
 
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発Takafumi ONAKA
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門増田 亨
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こうShinnosuke Tokuda
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
Wpfと非同期
Wpfと非同期Wpfと非同期
Wpfと非同期yone64
 
Msを16倍出し抜くwpf開発1回目
Msを16倍出し抜くwpf開発1回目Msを16倍出し抜くwpf開発1回目
Msを16倍出し抜くwpf開発1回目cct-inc
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する増田 亨
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 

What's hot (20)

それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用
ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用
ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用
 
Msを16倍出し抜くwpf開発2回目
Msを16倍出し抜くwpf開発2回目Msを16倍出し抜くwpf開発2回目
Msを16倍出し抜くwpf開発2回目
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
脱Unity!? UE4でVR開発のここが変わった
脱Unity!? UE4でVR開発のここが変わった脱Unity!? UE4でVR開発のここが変わった
脱Unity!? UE4でVR開発のここが変わった
 
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
 
MVC の Model を考える
MVC の Model を考えるMVC の Model を考える
MVC の Model を考える
 
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
 
MVVM入門
MVVM入門MVVM入門
MVVM入門
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こう
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
Wpfと非同期
Wpfと非同期Wpfと非同期
Wpfと非同期
 
Msを16倍出し抜くwpf開発1回目
Msを16倍出し抜くwpf開発1回目Msを16倍出し抜くwpf開発1回目
Msを16倍出し抜くwpf開発1回目
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 

Similar to 塹壕よりLivetとMVVM

MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方Kazuki Shibata
 
20150926 uwpストア攻略
20150926 uwpストア攻略20150926 uwpストア攻略
20150926 uwpストア攻略Makoto Nishimura
 
CLR/H第54回勉強会 ライトニングトーク
CLR/H第54回勉強会 ライトニングトークCLR/H第54回勉強会 ライトニングトーク
CLR/H第54回勉強会 ライトニングトークJun-ichi Sakamoto
 
ブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデルブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデルYuta Hiroto
 
LightSwitchで遊んでみた
LightSwitchで遊んでみたLightSwitchで遊んでみた
LightSwitchで遊んでみたYoshitaka Seo
 
究極にして至高のWAF
究極にして至高のWAF究極にして至高のWAF
究極にして至高のWAFYuki Ishikawa
 
WordPressで行う継続的インテグレーション入門編
WordPressで行う継続的インテグレーション入門編WordPressで行う継続的インテグレーション入門編
WordPressで行う継続的インテグレーション入門編Hiroshi Urabe
 
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -ShinichiAoyagi
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Narami Kiyokura
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
NodeにしましょうYuzo Hebishima
 
Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Yusuke Wada
 
UXDD MVVM Store Apps 蜜葉式開発フロー
UXDD MVVM Store Apps 蜜葉式開発フローUXDD MVVM Store Apps 蜜葉式開発フロー
UXDD MVVM Store Apps 蜜葉式開発フローc-mitsuba
 
MetroStyleAppsさわってみた わんくま
MetroStyleAppsさわってみた わんくまMetroStyleAppsさわってみた わんくま
MetroStyleAppsさわってみた わんくまc-mitsuba
 
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜Hiroshi Maekawa
 
ドメイン『駆動』『開発』
ドメイン『駆動』『開発』ドメイン『駆動』『開発』
ドメイン『駆動』『開発』Hiroshi Maekawa
 
大規模なJavaScript開発の話
大規模なJavaScript開発の話大規模なJavaScript開発の話
大規模なJavaScript開発の話terurou
 
「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方Yusuke Wada
 

Similar to 塹壕よりLivetとMVVM (20)

MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方
 
20150926 uwpストア攻略
20150926 uwpストア攻略20150926 uwpストア攻略
20150926 uwpストア攻略
 
CLR/H第54回勉強会 ライトニングトーク
CLR/H第54回勉強会 ライトニングトークCLR/H第54回勉強会 ライトニングトーク
CLR/H第54回勉強会 ライトニングトーク
 
ブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデルブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデル
 
LightSwitchで遊んでみた
LightSwitchで遊んでみたLightSwitchで遊んでみた
LightSwitchで遊んでみた
 
究極にして至高のWAF
究極にして至高のWAF究極にして至高のWAF
究極にして至高のWAF
 
WordPressで行う継続的インテグレーション入門編
WordPressで行う継続的インテグレーション入門編WordPressで行う継続的インテグレーション入門編
WordPressで行う継続的インテグレーション入門編
 
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
Nodeにしましょう
 
Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門
 
教育現場のニーズが生んだユーザーエクスペリエンス
教育現場のニーズが生んだユーザーエクスペリエンス教育現場のニーズが生んだユーザーエクスペリエンス
教育現場のニーズが生んだユーザーエクスペリエンス
 
UXDD MVVM Store Apps 蜜葉式開発フロー
UXDD MVVM Store Apps 蜜葉式開発フローUXDD MVVM Store Apps 蜜葉式開発フロー
UXDD MVVM Store Apps 蜜葉式開発フロー
 
Dockerとdev ops
Dockerとdev opsDockerとdev ops
Dockerとdev ops
 
MetroStyleAppsさわってみた わんくま
MetroStyleAppsさわってみた わんくまMetroStyleAppsさわってみた わんくま
MetroStyleAppsさわってみた わんくま
 
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
 
ドメイン『駆動』『開発』
ドメイン『駆動』『開発』ドメイン『駆動』『開発』
ドメイン『駆動』『開発』
 
大規模なJavaScript開発の話
大規模なJavaScript開発の話大規模なJavaScript開発の話
大規模なJavaScript開発の話
 
「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方
 
Word bench7月号
Word bench7月号Word bench7月号
Word bench7月号
 

More from Hiroshi Maekawa

新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜Hiroshi Maekawa
 
老舗大企業からスタートアップでの二年間
老舗大企業からスタートアップでの二年間老舗大企業からスタートアップでの二年間
老舗大企業からスタートアップでの二年間Hiroshi Maekawa
 
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ーHiroshi Maekawa
 
第8回大阪Jenkins勉強会LT: iOS vs CI
第8回大阪Jenkins勉強会LT: iOS vs CI第8回大阪Jenkins勉強会LT: iOS vs CI
第8回大阪Jenkins勉強会LT: iOS vs CIHiroshi Maekawa
 
Visual Studio Online as a CI Service
Visual Studio Online as a CI ServiceVisual Studio Online as a CI Service
Visual Studio Online as a CI ServiceHiroshi Maekawa
 
Travis, Circle そして Jenkins 2.0
Travis, Circle そして Jenkins 2.0Travis, Circle そして Jenkins 2.0
Travis, Circle そして Jenkins 2.0Hiroshi Maekawa
 
Getting Start with React Native
Getting Start with React NativeGetting Start with React Native
Getting Start with React NativeHiroshi Maekawa
 
「価値探索」がつないだクライアントと開発者の絆
「価値探索」がつないだクライアントと開発者の絆 「価値探索」がつないだクライアントと開発者の絆
「価値探索」がつないだクライアントと開発者の絆 Hiroshi Maekawa
 
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜Hiroshi Maekawa
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略Hiroshi Maekawa
 
iOSのCI as a Service事情
iOSのCI as a Service事情iOSのCI as a Service事情
iOSのCI as a Service事情Hiroshi Maekawa
 
テストって何をするもの? - テストの5W1H -
テストって何をするもの? - テストの5W1H -テストって何をするもの? - テストの5W1H -
テストって何をするもの? - テストの5W1H -Hiroshi Maekawa
 
テスト自動化のパターンと実践
テスト自動化のパターンと実践テスト自動化のパターンと実践
テスト自動化のパターンと実践Hiroshi Maekawa
 
ホントは楽しいエイブンポー
ホントは楽しいエイブンポーホントは楽しいエイブンポー
ホントは楽しいエイブンポーHiroshi Maekawa
 
テスト自動化のパタンランゲージ@Agilet Tour Osaka
テスト自動化のパタンランゲージ@Agilet Tour Osakaテスト自動化のパタンランゲージ@Agilet Tour Osaka
テスト自動化のパタンランゲージ@Agilet Tour OsakaHiroshi Maekawa
 
雑食系エンジニアの作りかた
雑食系エンジニアの作りかた雑食系エンジニアの作りかた
雑食系エンジニアの作りかたHiroshi Maekawa
 
自動化パタンランゲージ
自動化パタンランゲージ自動化パタンランゲージ
自動化パタンランゲージHiroshi Maekawa
 

More from Hiroshi Maekawa (20)

新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
 
老舗大企業からスタートアップでの二年間
老舗大企業からスタートアップでの二年間老舗大企業からスタートアップでの二年間
老舗大企業からスタートアップでの二年間
 
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
 
第8回大阪Jenkins勉強会LT: iOS vs CI
第8回大阪Jenkins勉強会LT: iOS vs CI第8回大阪Jenkins勉強会LT: iOS vs CI
第8回大阪Jenkins勉強会LT: iOS vs CI
 
Visual Studio Online as a CI Service
Visual Studio Online as a CI ServiceVisual Studio Online as a CI Service
Visual Studio Online as a CI Service
 
Travis, Circle そして Jenkins 2.0
Travis, Circle そして Jenkins 2.0Travis, Circle そして Jenkins 2.0
Travis, Circle そして Jenkins 2.0
 
Getting Start with React Native
Getting Start with React NativeGetting Start with React Native
Getting Start with React Native
 
「価値探索」がつないだクライアントと開発者の絆
「価値探索」がつないだクライアントと開発者の絆 「価値探索」がつないだクライアントと開発者の絆
「価値探索」がつないだクライアントと開発者の絆
 
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
 
なれる!IL
なれる!ILなれる!IL
なれる!IL
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略
 
iOSのCI as a Service事情
iOSのCI as a Service事情iOSのCI as a Service事情
iOSのCI as a Service事情
 
テストって何をするもの? - テストの5W1H -
テストって何をするもの? - テストの5W1H -テストって何をするもの? - テストの5W1H -
テストって何をするもの? - テストの5W1H -
 
テスト自動化のパターンと実践
テスト自動化のパターンと実践テスト自動化のパターンと実践
テスト自動化のパターンと実践
 
ホントは楽しいエイブンポー
ホントは楽しいエイブンポーホントは楽しいエイブンポー
ホントは楽しいエイブンポー
 
テスト自動化のパタンランゲージ@Agilet Tour Osaka
テスト自動化のパタンランゲージ@Agilet Tour Osakaテスト自動化のパタンランゲージ@Agilet Tour Osaka
テスト自動化のパタンランゲージ@Agilet Tour Osaka
 
雑食系エンジニアの作りかた
雑食系エンジニアの作りかた雑食系エンジニアの作りかた
雑食系エンジニアの作りかた
 
T4 Template 入門
T4 Template 入門T4 Template 入門
T4 Template 入門
 
窓辺に立つ執事
窓辺に立つ執事窓辺に立つ執事
窓辺に立つ執事
 
自動化パタンランゲージ
自動化パタンランゲージ自動化パタンランゲージ
自動化パタンランゲージ
 

Recently uploaded

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (11)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

塹壕よりLivetとMVVM

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n