SlideShare a Scribd company logo
グレープシテゖ株式会社
   八巻 雄哉
 ソフトウェゕ事業歴 25 年超
  文化オリエント株式会社( BOC )1980.05 ~ 2001.12
  1983年 私学会計システム Leyser 販売開始
 コンポーネントと共に歩んで15年
  1993年 PowerTools® 販売開始
    Visual Basic 用コンポーネント( VBX → OCX → ActiveX )
  2000年 Java対応コンポーネント販売開始
  2002年 PowerTools® for .NET 販売開始
  2008年 PowerTools® シリーズ15周年
 ソフトウェゕを Model / View /
  ViewModelの3つに分けて構築する
  WPFゕプリケーションに適用可能な
  ソフトウェゕゕーキテクチャ
 MVC( Model / View / Controller )

 ソフトウェゕゕーキテクチャは
       フレームワークに依存する。

 M-V-VMは
    WPF UIフレームワーク版MVC
UIとロジックの分離

  各コンポーネント間の依存性を最小限に
  UIではなくロジックを主体とした開発
保守性(変更耐性)

    再利用性

    テスト容易性

    分業

 Model(DataModel)
   ゕプリケーションが扱う
          データと手続きを表現する要素
 View
   データを視覚化して表示する要素
   ユーザー操作を受け取る要素
 ViewModel
   Viewのために最適化されたModel
   Viewのデータと状態を管理する要素
   ViewとModelのゕダプター
Unit Test          View
                               XAML
                                   最小限の
 テストメソッド                         コードビハ゗ンド

                 コマンドバ゗ンデゖング    データバ゗ンデゖング

ViewModel
            Viewに最適化されたModel、コマンド
                    データの受け渡し    業務フゔンクションの実行

Model
                データ、業務ロジック
① データバインディング
  System.Windows.Data.Bindingクラス
    INotifyPropertyChanged゗ンターフェ゗ス
    IDataErrorInfo゗ンターフェ゗ス


② コマンド
  System.Windows.Input.ICommand
                      ゗ンターフェ゗ス
    ICommandSource゗ンターフェ゗ス
 ソフトウェゕゕーキテクチャに
  「ただひとつの真の実装」は存在しない。
 BMI測定ゕプリケーション
Demo 0
 Bindingオブジェクト
  2つの異なるオブジェクトのプロパテゖ値を同期

  バ゗ンデゖング                    バ゗ンデゖング
   ターゲット                       ソース
             バ゗ンデゖング
                              データ
              オブジェクト
    UI要素
                             オブジェクト

               OneWay
   依存関係        TwoWay        プロパテゖ
   プロパテゖ
            OneWayToSource
ターゲット                                 ソース
                                       Personオブジェクト
       TextBox
         Textプロパテゖ                   Heightプロパテゖ


       TextBox
         Textプロパテゖ                   Weightプロパテゖ


<TextBox Text=quot;{Binding Weight,
Source={StaticResource person}}quot;/>
 FrameworkElement.DataContextプロパ
 テゖ
   Bindingオブジェクトごとにソースを
    指定するのではなく、
    共通のソースとして指定する場合に使用
   DataContextプロパテゖに設定した
    ソースオブジェクトは、子要素に継承される。
ターゲット                                 ソース
                                       Personオブジェクト
       DataContextプロパテゖ

this.DataContext = new Person();

       TextBox
          Textプロパテゖ                  Heightプロパテゖ


       TextBox
          Textプロパテゖ                  Weightプロパテゖ


<TextBox Text=quot;{Binding Weight}quot;/>
Demo 10
 ソースのプロパテゖ値が変更されたことを
   ターゲットに通知するために
   ソース側に必要な゗ンターフェ゗ス
     ソース側の各プロパテゖが変更された際に、
      PropertyChanged゗ベントを発生させる
      ように実装する。

class Person : INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged;
public double Bmi
{
  get { return _bmi; }
  private set
  {
     _bmi = value;
     this.OnPropertyChanged(quot;Bmiquot;);
  }
}

void OnPropertyChanged(string propertyName)
{
  PropertyChangedEventHandler handler = this.PropertyChanged;
  if (handler != null)
      handler(this, new PropertyChangedEventArgs(propertyName));
}
ターゲット                              ソース
                            Personオブジェクト
           20                          20
 TextBox
   Textプロパテゖ               Bmiプロパテゖ
                this.OnPropertyChanged(quot;Bmiquot;);




                         Calculateメソッド
                Bmi = Weight / Math.Pow(Height, 2);
Demo 11
View   Model
View
                          XAML
                              最小限の
                            コードビハ゗ンド



             データバ゗ンデゖング




                          業務フゔンクションの実行



Model
        データ、業務ロジック
 「身長」、「体重」のデフォルトを、
  未入力状態とする。
  ModelのHeightとWeight
   はdouble型
  Modelと直接バ゗ンド
   すると、未入力状態には
   できない。
View


       データバ゗ンデゖング                         エラー通知

ViewModel               string型
               Height    入力データ検証
                           • string.IsNullOrEmpty
                           • double.TryParse
              データ受け渡し

Model                              double型
                        Height
 WPFにおける入力データの検証は、
  データバ゗ンデゖングの
  プロセスの1つとして行われる。
バ゗ンデゖング              バ゗ンデゖング
 ターゲット                 ソース
  UI要素                データ
          バ゗ンデゖング
                     オブジェクト
           オブジェクト

 依存関係
          検証    変換    プロパテゖ
 プロパテゖ
 検証はBinding.ValidationRules
  プロパテゖに設定された
  ルールに基づいて行われる。
 既定で用意されているルールは2つ
  ExceptionValidationRule
  DataErrorValidationRule(WPF 3.5から)
    ソースオブジェクトのIDataErrorInfo
     ゗ンターフェ゗ス実装で発生するエラーを
     チェックする検証ルール
<TextBox>
  <TextBox.Text>
     <Binding Path=quot;Heightquot;>
       <Binding.ValidationRules>
          <DataErrorValidationRule/>
       </Binding.ValidationRules>
     </Binding>
  </TextBox.Text>
</TextBox>


簡略記法
Text=quot;{Binding Height, ValidatesOnDataErrors=true}quot;
 Binding.ValidatesOnDataErrorsプロパテゖ
   trueに設定することで、ValidationRules
    プロパテゖにDataErrorValidationRuleを
    設定した状態になる。
 Text=quot;{Binding Height, ValidatesOnDataErrors=true}quot;


ちなみにExceptionValidationRuleでも
                同様のプロパテゖあり
 Text=quot;{Binding Height, ValidatesOnExceptions=true}quot;
 Errorプロパテゖ
  オブジェクトに関する
         エラーメッセージを返す。
 Itemプロパテゖ(゗ンデクサ)
  指定した名前のプロパテゖに関する
         エラーメッセージを返す。
public string this[string columnName]
{
  get
  {
     string msg = null;
     if (columnName == quot;Heightquot;)
     {
         if (string.IsNullOrEmpty(Height))
             msg = quot;未入力quot;;
     }
     return msg;
  }
}
ターゲット                                       ソース
                                           class PersonViewModel
                                              : IDataErrorInfo
                       1a                                  1a
        TextBox
         Textプロパテゖ                         Heightプロパテゖ
                               検証

Text=quot;{Binding Height, ValidatesOnDataErrors=true}quot;
                                               バ゗ンドしている
                                               プロパテゖ名で
   Validation.Errors
                            ゗ンデクサ              ゗ンデクサを参照
   添付プロパテゖに
   ValidationErrorが         public string this[string columnName]
   追加される。               戻り値:
                        エラーメッセージ
 Validation.Errors添付プロパテゖに
  ValidationErrorが存在する場合、エラー
  テンプレートが表示される。
 Validation.ErrorTemplate
  添付プロパテゖ(ControlTemplate型)
  任意のControlTemplateを定義することで
   UI上のフゖードバックをカスタマ゗ズ可能
Demo 20
 有効な値が入力されていない場合には、
  「計算」ボタンを無効な状態にしたい。
private void ButtonStateUpadate()
{
   if (string.IsNullOrEmpty(_textbox1.Text) || string.IsNullOrEmpty(_textbox2.Text))
       _button1.IsEnabled = false;
   else
       _button1.IsEnabled = true;
}


         そもそも゗ベントハンドラを
          1行も書かないって話は?
private void Button_Click(object sender, RoutedEventArgs e)
{
   ((Person)this.DataContext).Calculate();
}
 実行ロジックを切り離して、
        再利用可能にする仕組み

 コマンドを作成しViewModelの
  プロパテゖとして公開することで、
  Viewはバ゗ンデゖングを利用して
  実行ロジックを呼び出すことができる。
 ICommandSource゗ンターフェ゗スを
  実装したクラス
 既定で存在するコマンドソース
  ButtonBase
    Button、CheckBox、RadioButtonなど
  Hyperlink
  MenuItem
 ICommand゗ンターフェ゗ス
  CanExecuteメソッド
    現在の状態でこのコマンドを実行できるかどう
     かを判断するメソッド
  Executeメソッド
    コマンド実行時に呼び出されるメソッド
  CanExecuteChanged゗ベント
    コマンドを実行するかどうかに影響するような
     変更があった場合に発生
ViewModel
                                                      1a
                                         Heightプロパテゖ
<Button Command=quot;{Binding Calc}quot;/>
    コマンドソース                          プロパテゖとしてコマンドを公開

                                     public ICommand Calc
          Commandプロパテゖ                Calcプロパテゖ


                              private class CalcCommand
   コマンド                          : ICommand
    Executeメソッド    CanExecuteメソッド     CanExecuteChanged
                                           ゗ベント
                    実行可能かどうかを
       実行処理                             実行の可否が変化
                    判断し、不可の場合
                                       した際に発生させる
                     にはfalseを返す
Demo 21
ViewModel
View




Model
① テスト容易性
  単体テストが簡単に書けるか?
② 再利用性
  修正を行わずに、
      Viewを差し替えることができるか?
Demo 30
Demo 40
 まずはデータバ゗ンデゖングを使って
           Model-Viewから始めよう。
 こうなったときはViewModelの出番
  ViewとModelが直接バ゗ンドすると
                     何かと都合が悪い
  実装すべき場所が
        ViewでもModelでもないコードがある
 ViewModelに対する単体テストを書いて
               テストを自動化しよう。
 宣言的に記述されるバ゗ンデゖングは
  デバッグが困難
  Visual Studio 2010に期待
 規模が小さく単純なゕプリケーションでは割に
  合わない。
 ソフトウェゕゕーキテクチャに
  「ただひとつの真の実装」は存在しない。
 是非GrapeCityブースに
                お立ち寄りください。
2008J Enterprise
Windowsフォーム、ASP.NETに加え、
 グリッド、チャート、スケジュール、レポート
    の4つのWPFコンポーネントが新登場




          http://www.grapecity.com/japan/c1/
 Tales from the Smart Client
 http://blogs.msdn.com/johngossman/
 Dan Crevier's Blog
 http://blogs.msdn.com/dancre/
 Josh Smith on WPF
 http://joshsmithonwpf.wordpress.com/
 Karl On WPF - .Net
 http://karlshifflett.wordpress.com/
 CodeProject.   Free source code and programming help
  http://www.codeproject.com/
InputMan for WPF絶賛開発中!!



Developers Summit 2009
『デベロッパーに贈る!M-V-VMパターンで作るWPFアプリケーション』

                              2009年2月13日
     グレープシテゖ株式会社 ツール事業部 テクニカルエバンジェリスト
 Microsoft MVP for Development Platforms - Client App Dev Jan 2009 - Dec 2009
                                                              八巻 雄哉
                                          http://d.hatena.ne.jp/Yamaki/

More Related Content

What's hot

保養品大全
保養品大全保養品大全
保養品大全honan4108
 
文献紹介:Semantic-based information retrieval in support of concept design.
文献紹介:Semantic-based information retrieval in support of concept design.文献紹介:Semantic-based information retrieval in support of concept design.
文献紹介:Semantic-based information retrieval in support of concept design.
Shin Sano
 
Practical Bug Reporting
Practical Bug ReportingPractical Bug Reporting
Practical Bug Reporting
charsbar
 
Lecture 10 db1
Lecture 10 db1Lecture 10 db1
Lecture 10 db1
Nermeen Elhamy
 
QNBFS Daily Technical Trader Qatar - January 10, 2021 التحليل الفني اليومي لب...
QNBFS Daily Technical Trader Qatar - January 10, 2021 التحليل الفني اليومي لب...QNBFS Daily Technical Trader Qatar - January 10, 2021 التحليل الفني اليومي لب...
QNBFS Daily Technical Trader Qatar - January 10, 2021 التحليل الفني اليومي لب...
QNB Group
 
俄罗斯Gost标准,进出口购买商品目录№RG 425
俄罗斯Gost标准,进出口购买商品目录№RG 425俄罗斯Gost标准,进出口购买商品目录№RG 425
俄罗斯Gost标准,进出口购买商品目录№RG 425
Turkmenistan Laws
 
Ph2
Ph2Ph2
03 Getting Started
03 Getting Started03 Getting Started
03 Getting Started
Makoto Ohnami
 
俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 3678
俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 3678俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 3678
俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 3678
Azerbaijan Laws
 
FPGAによるホームサービスロボットのための組込脳型計算機システム
FPGAによるホームサービスロボットのための組込脳型計算機システムFPGAによるホームサービスロボットのための組込脳型計算機システム
FPGAによるホームサービスロボットのための組込脳型計算機システム
直久 住川
 
Что такое ASP.NET MVC?
Что такое ASP.NET MVC?Что такое ASP.NET MVC?
Что такое ASP.NET MVC?
Dima Pasko
 
俄罗斯Gost标准,进出口购买商品目录№RG 427
俄罗斯Gost标准,进出口购买商品目录№RG 427俄罗斯Gost标准,进出口购买商品目录№RG 427
俄罗斯Gost标准,进出口购买商品目录№RG 427
Turkmenistan Laws
 
可扩展网站架构(for 网志年会)
可扩展网站架构(for 网志年会)可扩展网站架构(for 网志年会)
可扩展网站架构(for 网志年会)
Dahui Feng
 
20090522 Candycane
20090522 Candycane20090522 Candycane
20090522 Candycane
Yusuke Ando
 
俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 3705
俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 3705俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 3705
俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 3705
Azerbaijan Laws
 
Distribution of PHPCon ElePHPant
Distribution of PHPCon ElePHPantDistribution of PHPCon ElePHPant
Distribution of PHPCon ElePHPant
Noriko YAMAMOTO
 
俄罗斯进出口标准,技术规格,法律,法规,中英文,目录编号RG 4397
俄罗斯进出口标准,技术规格,法律,法规,中英文,目录编号RG 4397俄罗斯进出口标准,技术规格,法律,法规,中英文,目录编号RG 4397
俄罗斯进出口标准,技术规格,法律,法规,中英文,目录编号RG 4397
Russian Gost
 
2009-09-11 / YAPC::Asia 2009
2009-09-11 / YAPC::Asia 20092009-09-11 / YAPC::Asia 2009
2009-09-11 / YAPC::Asia 2009
IWATA Susumu
 
俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 2804
俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 2804俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 2804
俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 2804
Azerbaijan Laws
 

What's hot (20)

保養品大全
保養品大全保養品大全
保養品大全
 
文献紹介:Semantic-based information retrieval in support of concept design.
文献紹介:Semantic-based information retrieval in support of concept design.文献紹介:Semantic-based information retrieval in support of concept design.
文献紹介:Semantic-based information retrieval in support of concept design.
 
Practical Bug Reporting
Practical Bug ReportingPractical Bug Reporting
Practical Bug Reporting
 
Lecture 10 db1
Lecture 10 db1Lecture 10 db1
Lecture 10 db1
 
QNBFS Daily Technical Trader Qatar - January 10, 2021 التحليل الفني اليومي لب...
QNBFS Daily Technical Trader Qatar - January 10, 2021 التحليل الفني اليومي لب...QNBFS Daily Technical Trader Qatar - January 10, 2021 التحليل الفني اليومي لب...
QNBFS Daily Technical Trader Qatar - January 10, 2021 التحليل الفني اليومي لب...
 
Apache Tapestry
Apache TapestryApache Tapestry
Apache Tapestry
 
俄罗斯Gost标准,进出口购买商品目录№RG 425
俄罗斯Gost标准,进出口购买商品目录№RG 425俄罗斯Gost标准,进出口购买商品目录№RG 425
俄罗斯Gost标准,进出口购买商品目录№RG 425
 
Ph2
Ph2Ph2
Ph2
 
03 Getting Started
03 Getting Started03 Getting Started
03 Getting Started
 
俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 3678
俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 3678俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 3678
俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 3678
 
FPGAによるホームサービスロボットのための組込脳型計算機システム
FPGAによるホームサービスロボットのための組込脳型計算機システムFPGAによるホームサービスロボットのための組込脳型計算機システム
FPGAによるホームサービスロボットのための組込脳型計算機システム
 
Что такое ASP.NET MVC?
Что такое ASP.NET MVC?Что такое ASP.NET MVC?
Что такое ASP.NET MVC?
 
俄罗斯Gost标准,进出口购买商品目录№RG 427
俄罗斯Gost标准,进出口购买商品目录№RG 427俄罗斯Gost标准,进出口购买商品目录№RG 427
俄罗斯Gost标准,进出口购买商品目录№RG 427
 
可扩展网站架构(for 网志年会)
可扩展网站架构(for 网志年会)可扩展网站架构(for 网志年会)
可扩展网站架构(for 网志年会)
 
20090522 Candycane
20090522 Candycane20090522 Candycane
20090522 Candycane
 
俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 3705
俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 3705俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 3705
俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 3705
 
Distribution of PHPCon ElePHPant
Distribution of PHPCon ElePHPantDistribution of PHPCon ElePHPant
Distribution of PHPCon ElePHPant
 
俄罗斯进出口标准,技术规格,法律,法规,中英文,目录编号RG 4397
俄罗斯进出口标准,技术规格,法律,法规,中英文,目录编号RG 4397俄罗斯进出口标准,技术规格,法律,法规,中英文,目录编号RG 4397
俄罗斯进出口标准,技术规格,法律,法规,中英文,目录编号RG 4397
 
2009-09-11 / YAPC::Asia 2009
2009-09-11 / YAPC::Asia 20092009-09-11 / YAPC::Asia 2009
2009-09-11 / YAPC::Asia 2009
 
俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 2804
俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 2804俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 2804
俄语GOST标准,技术规范,法律,法规,中文英语,目录编号RG 2804
 

Similar to 【13 C 2】デベロッパーに贈る!M-V-VMパターンで造るWPFアプリケーション

【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」
【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」
【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」devsumi2009
 
技術トレンディセミナー フレームワークとしてのTrac
技術トレンディセミナー フレームワークとしてのTrac技術トレンディセミナー フレームワークとしてのTrac
技術トレンディセミナー フレームワークとしてのTracterada
 
Cloud era -『クラウド時代』マッシュアップ技術による地方からの世界発信
Cloud era -『クラウド時代』マッシュアップ技術による地方からの世界発信Cloud era -『クラウド時代』マッシュアップ技術による地方からの世界発信
Cloud era -『クラウド時代』マッシュアップ技術による地方からの世界発信
Yusuke Kawasaki
 
Reloaded
ReloadedReloaded
Reloaded
Shunsaku Kudo
 
20090418 イケテルRails勉強会 第2部Air編
20090418 イケテルRails勉強会 第2部Air編20090418 イケテルRails勉強会 第2部Air編
20090418 イケテルRails勉強会 第2部Air編
mochiko AsTech
 
テキストマイニングとNLPビジネス
テキストマイニングとNLPビジネステキストマイニングとNLPビジネス
テキストマイニングとNLPビジネスHiroshi Ono
 
Cloud Computing - クラウドコンピューティング(会津産学懇話会)
Cloud Computing - クラウドコンピューティング(会津産学懇話会)Cloud Computing - クラウドコンピューティング(会津産学懇話会)
Cloud Computing - クラウドコンピューティング(会津産学懇話会)
Yusuke Kawasaki
 
Linuxユーザーのための Windows 管理入門
Linuxユーザーのための Windows 管理入門Linuxユーザーのための Windows 管理入門
Linuxユーザーのための Windows 管理入門
shigeya
 
PHP超入門@LL温泉
PHP超入門@LL温泉PHP超入門@LL温泉
PHP超入門@LL温泉
Sotaro Karasawa
 
ブラウザでMap Reduce風味の並列分散処理
ブラウザでMap Reduce風味の並列分散処理ブラウザでMap Reduce風味の並列分散処理
ブラウザでMap Reduce風味の並列分散処理
Shinya Miyazaki
 
Green IT
Green ITGreen IT
20090323 Phpstudy
20090323 Phpstudy20090323 Phpstudy
20090323 PhpstudyYusuke Ando
 
【12-D-6】 Silverlight によるハイグレードなLOB/BI実現のためのコンポーネント活用法
【12-D-6】 Silverlight によるハイグレードなLOB/BI実現のためのコンポーネント活用法【12-D-6】 Silverlight によるハイグレードなLOB/BI実現のためのコンポーネント活用法
【12-D-6】 Silverlight によるハイグレードなLOB/BI実現のためのコンポーネント活用法devsumi2009
 
英語ブログのスヽメ - 1000スピーカープロジェクト#5
英語ブログのスヽメ - 1000スピーカープロジェクト#5英語ブログのスヽメ - 1000スピーカープロジェクト#5
英語ブログのスヽメ - 1000スピーカープロジェクト#5Yusuke Kawasaki
 
Search Engines Chapter 1 Summary
Search Engines Chapter 1 SummarySearch Engines Chapter 1 Summary
Search Engines Chapter 1 Summary
sleepy_yoshi
 
20090612 実践Redmine @ Redmine勉強会
20090612 実践Redmine @ Redmine勉強会20090612 実践Redmine @ Redmine勉強会
20090612 実践Redmine @ Redmine勉強会Yusuke Ando
 
Where20 2009report
Where20 2009reportWhere20 2009report
Where20 2009report
Toru Mori
 
Oracle Unconference 松下 4/22
Oracle Unconference 松下 4/22Oracle Unconference 松下 4/22
Oracle Unconference 松下 4/22matsushita
 
マッシュアップ×エンタープライズ開発 (XDev 2008)
マッシュアップ×エンタープライズ開発 (XDev 2008)マッシュアップ×エンタープライズ開発 (XDev 2008)
マッシュアップ×エンタープライズ開発 (XDev 2008)
Yusuke Kawasaki
 

Similar to 【13 C 2】デベロッパーに贈る!M-V-VMパターンで造るWPFアプリケーション (20)

【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」
【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」
【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」
 
技術トレンディセミナー フレームワークとしてのTrac
技術トレンディセミナー フレームワークとしてのTrac技術トレンディセミナー フレームワークとしてのTrac
技術トレンディセミナー フレームワークとしてのTrac
 
sigfpai73-kaji
sigfpai73-kajisigfpai73-kaji
sigfpai73-kaji
 
Cloud era -『クラウド時代』マッシュアップ技術による地方からの世界発信
Cloud era -『クラウド時代』マッシュアップ技術による地方からの世界発信Cloud era -『クラウド時代』マッシュアップ技術による地方からの世界発信
Cloud era -『クラウド時代』マッシュアップ技術による地方からの世界発信
 
Reloaded
ReloadedReloaded
Reloaded
 
20090418 イケテルRails勉強会 第2部Air編
20090418 イケテルRails勉強会 第2部Air編20090418 イケテルRails勉強会 第2部Air編
20090418 イケテルRails勉強会 第2部Air編
 
テキストマイニングとNLPビジネス
テキストマイニングとNLPビジネステキストマイニングとNLPビジネス
テキストマイニングとNLPビジネス
 
Cloud Computing - クラウドコンピューティング(会津産学懇話会)
Cloud Computing - クラウドコンピューティング(会津産学懇話会)Cloud Computing - クラウドコンピューティング(会津産学懇話会)
Cloud Computing - クラウドコンピューティング(会津産学懇話会)
 
Linuxユーザーのための Windows 管理入門
Linuxユーザーのための Windows 管理入門Linuxユーザーのための Windows 管理入門
Linuxユーザーのための Windows 管理入門
 
PHP超入門@LL温泉
PHP超入門@LL温泉PHP超入門@LL温泉
PHP超入門@LL温泉
 
ブラウザでMap Reduce風味の並列分散処理
ブラウザでMap Reduce風味の並列分散処理ブラウザでMap Reduce風味の並列分散処理
ブラウザでMap Reduce風味の並列分散処理
 
Green IT
Green ITGreen IT
Green IT
 
20090323 Phpstudy
20090323 Phpstudy20090323 Phpstudy
20090323 Phpstudy
 
【12-D-6】 Silverlight によるハイグレードなLOB/BI実現のためのコンポーネント活用法
【12-D-6】 Silverlight によるハイグレードなLOB/BI実現のためのコンポーネント活用法【12-D-6】 Silverlight によるハイグレードなLOB/BI実現のためのコンポーネント活用法
【12-D-6】 Silverlight によるハイグレードなLOB/BI実現のためのコンポーネント活用法
 
英語ブログのスヽメ - 1000スピーカープロジェクト#5
英語ブログのスヽメ - 1000スピーカープロジェクト#5英語ブログのスヽメ - 1000スピーカープロジェクト#5
英語ブログのスヽメ - 1000スピーカープロジェクト#5
 
Search Engines Chapter 1 Summary
Search Engines Chapter 1 SummarySearch Engines Chapter 1 Summary
Search Engines Chapter 1 Summary
 
20090612 実践Redmine @ Redmine勉強会
20090612 実践Redmine @ Redmine勉強会20090612 実践Redmine @ Redmine勉強会
20090612 実践Redmine @ Redmine勉強会
 
Where20 2009report
Where20 2009reportWhere20 2009report
Where20 2009report
 
Oracle Unconference 松下 4/22
Oracle Unconference 松下 4/22Oracle Unconference 松下 4/22
Oracle Unconference 松下 4/22
 
マッシュアップ×エンタープライズ開発 (XDev 2008)
マッシュアップ×エンタープライズ開発 (XDev 2008)マッシュアップ×エンタープライズ開発 (XDev 2008)
マッシュアップ×エンタープライズ開発 (XDev 2008)
 

More from Yuya Yamaki

Basic言語でiOSアプリを作る
Basic言語でiOSアプリを作るBasic言語でiOSアプリを作る
Basic言語でiOSアプリを作る
Yuya Yamaki
 
続Xamarinはじめました
続Xamarinはじめました続Xamarinはじめました
続Xamarinはじめました
Yuya Yamaki
 
Xamarinはじめました
XamarinはじめましたXamarinはじめました
Xamarinはじめました
Yuya Yamaki
 
TypeScript入門してみた
TypeScript入門してみたTypeScript入門してみた
TypeScript入門してみた
Yuya Yamaki
 
Windowsの画面スケーリングを きちんと理解しよう
Windowsの画面スケーリングをきちんと理解しようWindowsの画面スケーリングをきちんと理解しよう
Windowsの画面スケーリングを きちんと理解しようYuya Yamaki
 
.Net技術でこれからも食べていくための技術戦略
.Net技術でこれからも食べていくための技術戦略.Net技術でこれからも食べていくための技術戦略
.Net技術でこれからも食べていくための技術戦略
Yuya Yamaki
 
.NET技術でこれからも食べていくための技術戦略
.NET技術でこれからも食べていくための技術戦略.NET技術でこれからも食べていくための技術戦略
.NET技術でこれからも食べていくための技術戦略
Yuya Yamaki
 
Developers Summit 2013【14-E-3】Windows 8デザインガイド
Developers Summit 2013【14-E-3】Windows 8デザインガイドDevelopers Summit 2013【14-E-3】Windows 8デザインガイド
Developers Summit 2013【14-E-3】Windows 8デザインガイド
Yuya Yamaki
 
今さらWPF? いいえ、今こそWPF!
今さらWPF?いいえ、今こそWPF!今さらWPF?いいえ、今こそWPF!
今さらWPF? いいえ、今こそWPF!
Yuya Yamaki
 
デスクトップアプリ開発者が押さえておくべきWindows 8 時代の変革
デスクトップアプリ開発者が押さえておくべきWindows 8 時代の変革デスクトップアプリ開発者が押さえておくべきWindows 8 時代の変革
デスクトップアプリ開発者が押さえておくべきWindows 8 時代の変革
Yuya Yamaki
 
デスクトップアプリ開発者が押さえておくべき Windows 8時代の変革
デスクトップアプリ開発者が押さえておくべきWindows 8時代の変革デスクトップアプリ開発者が押さえておくべきWindows 8時代の変革
デスクトップアプリ開発者が押さえておくべき Windows 8時代の変革Yuya Yamaki
 
Windows 8時代のUXを支える非同期プログラミング
Windows 8時代のUXを支える非同期プログラミングWindows 8時代のUXを支える非同期プログラミング
Windows 8時代のUXを支える非同期プログラミングYuya Yamaki
 
どうなる?Windows 8時代の業務アプリ開発
どうなる?Windows 8時代の業務アプリ開発どうなる?Windows 8時代の業務アプリ開発
どうなる?Windows 8時代の業務アプリ開発
Yuya Yamaki
 
Metroスタイルで花開くか? XAMLベースのUIフレームワーク
Metroスタイルで花開くか?XAMLベースのUIフレームワークMetroスタイルで花開くか?XAMLベースのUIフレームワーク
Metroスタイルで花開くか? XAMLベースのUIフレームワーク
Yuya Yamaki
 
WPF/Silverlight視点で視る MetroスタイルのXAML
WPF/Silverlight視点で視るMetroスタイルのXAMLWPF/Silverlight視点で視るMetroスタイルのXAML
WPF/Silverlight視点で視る MetroスタイルのXAML
Yuya Yamaki
 
77回スピーカーを経験して分かったこと」共有します
77回スピーカーを経験して分かったこと」共有します77回スピーカーを経験して分かったこと」共有します
77回スピーカーを経験して分かったこと」共有しますYuya Yamaki
 
Silverlight 5でぶり返すWPF不要論
Silverlight 5でぶり返すWPF不要論Silverlight 5でぶり返すWPF不要論
Silverlight 5でぶり返すWPF不要論Yuya Yamaki
 
Windowsフォームで大丈夫か?一番良いのを頼む。
Windowsフォームで大丈夫か?一番良いのを頼む。Windowsフォームで大丈夫か?一番良いのを頼む。
Windowsフォームで大丈夫か?一番良いのを頼む。Yuya Yamaki
 
半透明は飾りです 偉い人にはそれがわからんのですよ
半透明は飾りです偉い人にはそれがわからんのですよ半透明は飾りです偉い人にはそれがわからんのですよ
半透明は飾りです 偉い人にはそれがわからんのですよYuya Yamaki
 
60分でわかる!SilverlightとWPFの入力チェック
60分でわかる!SilverlightとWPFの入力チェック60分でわかる!SilverlightとWPFの入力チェック
60分でわかる!SilverlightとWPFの入力チェック
Yuya Yamaki
 

More from Yuya Yamaki (20)

Basic言語でiOSアプリを作る
Basic言語でiOSアプリを作るBasic言語でiOSアプリを作る
Basic言語でiOSアプリを作る
 
続Xamarinはじめました
続Xamarinはじめました続Xamarinはじめました
続Xamarinはじめました
 
Xamarinはじめました
XamarinはじめましたXamarinはじめました
Xamarinはじめました
 
TypeScript入門してみた
TypeScript入門してみたTypeScript入門してみた
TypeScript入門してみた
 
Windowsの画面スケーリングを きちんと理解しよう
Windowsの画面スケーリングをきちんと理解しようWindowsの画面スケーリングをきちんと理解しよう
Windowsの画面スケーリングを きちんと理解しよう
 
.Net技術でこれからも食べていくための技術戦略
.Net技術でこれからも食べていくための技術戦略.Net技術でこれからも食べていくための技術戦略
.Net技術でこれからも食べていくための技術戦略
 
.NET技術でこれからも食べていくための技術戦略
.NET技術でこれからも食べていくための技術戦略.NET技術でこれからも食べていくための技術戦略
.NET技術でこれからも食べていくための技術戦略
 
Developers Summit 2013【14-E-3】Windows 8デザインガイド
Developers Summit 2013【14-E-3】Windows 8デザインガイドDevelopers Summit 2013【14-E-3】Windows 8デザインガイド
Developers Summit 2013【14-E-3】Windows 8デザインガイド
 
今さらWPF? いいえ、今こそWPF!
今さらWPF?いいえ、今こそWPF!今さらWPF?いいえ、今こそWPF!
今さらWPF? いいえ、今こそWPF!
 
デスクトップアプリ開発者が押さえておくべきWindows 8 時代の変革
デスクトップアプリ開発者が押さえておくべきWindows 8 時代の変革デスクトップアプリ開発者が押さえておくべきWindows 8 時代の変革
デスクトップアプリ開発者が押さえておくべきWindows 8 時代の変革
 
デスクトップアプリ開発者が押さえておくべき Windows 8時代の変革
デスクトップアプリ開発者が押さえておくべきWindows 8時代の変革デスクトップアプリ開発者が押さえておくべきWindows 8時代の変革
デスクトップアプリ開発者が押さえておくべき Windows 8時代の変革
 
Windows 8時代のUXを支える非同期プログラミング
Windows 8時代のUXを支える非同期プログラミングWindows 8時代のUXを支える非同期プログラミング
Windows 8時代のUXを支える非同期プログラミング
 
どうなる?Windows 8時代の業務アプリ開発
どうなる?Windows 8時代の業務アプリ開発どうなる?Windows 8時代の業務アプリ開発
どうなる?Windows 8時代の業務アプリ開発
 
Metroスタイルで花開くか? XAMLベースのUIフレームワーク
Metroスタイルで花開くか?XAMLベースのUIフレームワークMetroスタイルで花開くか?XAMLベースのUIフレームワーク
Metroスタイルで花開くか? XAMLベースのUIフレームワーク
 
WPF/Silverlight視点で視る MetroスタイルのXAML
WPF/Silverlight視点で視るMetroスタイルのXAMLWPF/Silverlight視点で視るMetroスタイルのXAML
WPF/Silverlight視点で視る MetroスタイルのXAML
 
77回スピーカーを経験して分かったこと」共有します
77回スピーカーを経験して分かったこと」共有します77回スピーカーを経験して分かったこと」共有します
77回スピーカーを経験して分かったこと」共有します
 
Silverlight 5でぶり返すWPF不要論
Silverlight 5でぶり返すWPF不要論Silverlight 5でぶり返すWPF不要論
Silverlight 5でぶり返すWPF不要論
 
Windowsフォームで大丈夫か?一番良いのを頼む。
Windowsフォームで大丈夫か?一番良いのを頼む。Windowsフォームで大丈夫か?一番良いのを頼む。
Windowsフォームで大丈夫か?一番良いのを頼む。
 
半透明は飾りです 偉い人にはそれがわからんのですよ
半透明は飾りです偉い人にはそれがわからんのですよ半透明は飾りです偉い人にはそれがわからんのですよ
半透明は飾りです 偉い人にはそれがわからんのですよ
 
60分でわかる!SilverlightとWPFの入力チェック
60分でわかる!SilverlightとWPFの入力チェック60分でわかる!SilverlightとWPFの入力チェック
60分でわかる!SilverlightとWPFの入力チェック
 

Recently uploaded

Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
Fwdays
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
Bhaskar Mitra
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
Abida Shariff
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 

Recently uploaded (20)

Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 

【13 C 2】デベロッパーに贈る!M-V-VMパターンで造るWPFアプリケーション

  • 2.
  • 3.  ソフトウェゕ事業歴 25 年超  文化オリエント株式会社( BOC )1980.05 ~ 2001.12  1983年 私学会計システム Leyser 販売開始  コンポーネントと共に歩んで15年  1993年 PowerTools® 販売開始  Visual Basic 用コンポーネント( VBX → OCX → ActiveX )  2000年 Java対応コンポーネント販売開始  2002年 PowerTools® for .NET 販売開始  2008年 PowerTools® シリーズ15周年
  • 4.  ソフトウェゕを Model / View / ViewModelの3つに分けて構築する WPFゕプリケーションに適用可能な ソフトウェゕゕーキテクチャ
  • 5.  MVC( Model / View / Controller )  ソフトウェゕゕーキテクチャは フレームワークに依存する。  M-V-VMは WPF UIフレームワーク版MVC
  • 6. UIとロジックの分離  各コンポーネント間の依存性を最小限に  UIではなくロジックを主体とした開発
  • 7. 保守性(変更耐性)  再利用性  テスト容易性  分業 
  • 8.  Model(DataModel)  ゕプリケーションが扱う データと手続きを表現する要素  View  データを視覚化して表示する要素  ユーザー操作を受け取る要素  ViewModel  Viewのために最適化されたModel  Viewのデータと状態を管理する要素  ViewとModelのゕダプター
  • 9. Unit Test View XAML 最小限の テストメソッド コードビハ゗ンド コマンドバ゗ンデゖング データバ゗ンデゖング ViewModel Viewに最適化されたModel、コマンド データの受け渡し 業務フゔンクションの実行 Model データ、業務ロジック
  • 10. ① データバインディング  System.Windows.Data.Bindingクラス  INotifyPropertyChanged゗ンターフェ゗ス  IDataErrorInfo゗ンターフェ゗ス ② コマンド  System.Windows.Input.ICommand ゗ンターフェ゗ス  ICommandSource゗ンターフェ゗ス
  • 11.  ソフトウェゕゕーキテクチャに 「ただひとつの真の実装」は存在しない。
  • 14.  Bindingオブジェクト  2つの異なるオブジェクトのプロパテゖ値を同期 バ゗ンデゖング バ゗ンデゖング ターゲット ソース バ゗ンデゖング データ オブジェクト UI要素 オブジェクト OneWay 依存関係 TwoWay プロパテゖ プロパテゖ OneWayToSource
  • 15. ターゲット ソース Personオブジェクト TextBox Textプロパテゖ Heightプロパテゖ TextBox Textプロパテゖ Weightプロパテゖ <TextBox Text=quot;{Binding Weight, Source={StaticResource person}}quot;/>
  • 16.  FrameworkElement.DataContextプロパ テゖ  Bindingオブジェクトごとにソースを 指定するのではなく、 共通のソースとして指定する場合に使用  DataContextプロパテゖに設定した ソースオブジェクトは、子要素に継承される。
  • 17. ターゲット ソース Personオブジェクト DataContextプロパテゖ this.DataContext = new Person(); TextBox Textプロパテゖ Heightプロパテゖ TextBox Textプロパテゖ Weightプロパテゖ <TextBox Text=quot;{Binding Weight}quot;/>
  • 19.  ソースのプロパテゖ値が変更されたことを ターゲットに通知するために ソース側に必要な゗ンターフェ゗ス  ソース側の各プロパテゖが変更された際に、 PropertyChanged゗ベントを発生させる ように実装する。 class Person : INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged;
  • 20. public double Bmi { get { return _bmi; } private set { _bmi = value; this.OnPropertyChanged(quot;Bmiquot;); } } void OnPropertyChanged(string propertyName) { PropertyChangedEventHandler handler = this.PropertyChanged; if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); }
  • 21. ターゲット ソース Personオブジェクト 20 20 TextBox Textプロパテゖ Bmiプロパテゖ this.OnPropertyChanged(quot;Bmiquot;); Calculateメソッド Bmi = Weight / Math.Pow(Height, 2);
  • 23. View Model
  • 24. View XAML 最小限の コードビハ゗ンド データバ゗ンデゖング 業務フゔンクションの実行 Model データ、業務ロジック
  • 25.  「身長」、「体重」のデフォルトを、 未入力状態とする。  ModelのHeightとWeight はdouble型  Modelと直接バ゗ンド すると、未入力状態には できない。
  • 26. View データバ゗ンデゖング エラー通知 ViewModel string型 Height 入力データ検証 • string.IsNullOrEmpty • double.TryParse データ受け渡し Model double型 Height
  • 27.  WPFにおける入力データの検証は、 データバ゗ンデゖングの プロセスの1つとして行われる。 バ゗ンデゖング バ゗ンデゖング ターゲット ソース UI要素 データ バ゗ンデゖング オブジェクト オブジェクト 依存関係 検証 変換 プロパテゖ プロパテゖ
  • 28.  検証はBinding.ValidationRules プロパテゖに設定された ルールに基づいて行われる。  既定で用意されているルールは2つ  ExceptionValidationRule  DataErrorValidationRule(WPF 3.5から)  ソースオブジェクトのIDataErrorInfo ゗ンターフェ゗ス実装で発生するエラーを チェックする検証ルール
  • 29. <TextBox> <TextBox.Text> <Binding Path=quot;Heightquot;> <Binding.ValidationRules> <DataErrorValidationRule/> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox> 簡略記法 Text=quot;{Binding Height, ValidatesOnDataErrors=true}quot;
  • 30.  Binding.ValidatesOnDataErrorsプロパテゖ  trueに設定することで、ValidationRules プロパテゖにDataErrorValidationRuleを 設定した状態になる。 Text=quot;{Binding Height, ValidatesOnDataErrors=true}quot; ちなみにExceptionValidationRuleでも 同様のプロパテゖあり Text=quot;{Binding Height, ValidatesOnExceptions=true}quot;
  • 31.  Errorプロパテゖ  オブジェクトに関する エラーメッセージを返す。  Itemプロパテゖ(゗ンデクサ)  指定した名前のプロパテゖに関する エラーメッセージを返す。
  • 32. public string this[string columnName] { get { string msg = null; if (columnName == quot;Heightquot;) { if (string.IsNullOrEmpty(Height)) msg = quot;未入力quot;; } return msg; } }
  • 33. ターゲット ソース class PersonViewModel : IDataErrorInfo 1a 1a TextBox Textプロパテゖ Heightプロパテゖ 検証 Text=quot;{Binding Height, ValidatesOnDataErrors=true}quot; バ゗ンドしている プロパテゖ名で Validation.Errors ゗ンデクサ ゗ンデクサを参照 添付プロパテゖに ValidationErrorが public string this[string columnName] 追加される。 戻り値: エラーメッセージ
  • 34.  Validation.Errors添付プロパテゖに ValidationErrorが存在する場合、エラー テンプレートが表示される。  Validation.ErrorTemplate 添付プロパテゖ(ControlTemplate型)  任意のControlTemplateを定義することで UI上のフゖードバックをカスタマ゗ズ可能
  • 36.  有効な値が入力されていない場合には、 「計算」ボタンを無効な状態にしたい。
  • 37. private void ButtonStateUpadate() { if (string.IsNullOrEmpty(_textbox1.Text) || string.IsNullOrEmpty(_textbox2.Text)) _button1.IsEnabled = false; else _button1.IsEnabled = true; }  そもそも゗ベントハンドラを 1行も書かないって話は? private void Button_Click(object sender, RoutedEventArgs e) { ((Person)this.DataContext).Calculate(); }
  • 38.  実行ロジックを切り離して、 再利用可能にする仕組み  コマンドを作成しViewModelの プロパテゖとして公開することで、 Viewはバ゗ンデゖングを利用して 実行ロジックを呼び出すことができる。
  • 39.  ICommandSource゗ンターフェ゗スを 実装したクラス  既定で存在するコマンドソース  ButtonBase  Button、CheckBox、RadioButtonなど  Hyperlink  MenuItem
  • 40.  ICommand゗ンターフェ゗ス  CanExecuteメソッド  現在の状態でこのコマンドを実行できるかどう かを判断するメソッド  Executeメソッド  コマンド実行時に呼び出されるメソッド  CanExecuteChanged゗ベント  コマンドを実行するかどうかに影響するような 変更があった場合に発生
  • 41. ViewModel 1a Heightプロパテゖ <Button Command=quot;{Binding Calc}quot;/> コマンドソース プロパテゖとしてコマンドを公開 public ICommand Calc Commandプロパテゖ Calcプロパテゖ private class CalcCommand コマンド : ICommand Executeメソッド CanExecuteメソッド CanExecuteChanged ゗ベント 実行可能かどうかを 実行処理 実行の可否が変化 判断し、不可の場合 した際に発生させる にはfalseを返す
  • 44. ① テスト容易性  単体テストが簡単に書けるか? ② 再利用性  修正を行わずに、 Viewを差し替えることができるか?
  • 47.  まずはデータバ゗ンデゖングを使って Model-Viewから始めよう。  こうなったときはViewModelの出番  ViewとModelが直接バ゗ンドすると 何かと都合が悪い  実装すべき場所が ViewでもModelでもないコードがある  ViewModelに対する単体テストを書いて テストを自動化しよう。
  • 48.  宣言的に記述されるバ゗ンデゖングは デバッグが困難  Visual Studio 2010に期待  規模が小さく単純なゕプリケーションでは割に 合わない。  ソフトウェゕゕーキテクチャに 「ただひとつの真の実装」は存在しない。  是非GrapeCityブースに お立ち寄りください。
  • 49. 2008J Enterprise Windowsフォーム、ASP.NETに加え、 グリッド、チャート、スケジュール、レポート の4つのWPFコンポーネントが新登場 http://www.grapecity.com/japan/c1/
  • 50.  Tales from the Smart Client http://blogs.msdn.com/johngossman/  Dan Crevier's Blog http://blogs.msdn.com/dancre/  Josh Smith on WPF http://joshsmithonwpf.wordpress.com/  Karl On WPF - .Net http://karlshifflett.wordpress.com/  CodeProject. Free source code and programming help http://www.codeproject.com/
  • 51. InputMan for WPF絶賛開発中!! Developers Summit 2009 『デベロッパーに贈る!M-V-VMパターンで作るWPFアプリケーション』 2009年2月13日 グレープシテゖ株式会社 ツール事業部 テクニカルエバンジェリスト Microsoft MVP for Development Platforms - Client App Dev Jan 2009 - Dec 2009 八巻 雄哉 http://d.hatena.ne.jp/Yamaki/

Editor's Notes

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