SlideShare a Scribd company logo
Silverlight を使ったLarge-Scale Applicationの構築- MVVM及び Prism のご紹介 - 鈴木 章太郎アーキテクトエバンジェリストマイクロソフト株式会社http://blogs.msdn.com/shosuz/ Twitter : @shosuz
アウトラインMVVMModel – View – ViewModel何をするものかどこで使えば一番うまく使えるか応用PrismMVVMを有効に使うためにギャップを埋めるためにオプション
ゴールSilverlight におけるMVVM の重要性ゴールを達成するためには多くの手段がある実際に動かしてみようMVVM イネーブラについて学ぼうPrism独自のものを作成しよう
他にも MV_ とついているものが…?MVVMMVCMVPMV????アプリケーション構築において、メンテナンス性やスケーラビリティ確保のために、一般的に受け入れられているパターン
Model-View-ViewModel全体像MVVM, Prism, MEF - WCF RIA Services連携WPF、Silverlight の疎結合 ソリューションのパターン下記の実装を行う (トライアド)ModelData(Web)Service のエンティティ(をラップする)WCF RIA ServicesをModelと することも可能ViewModelModelを UI に合わせて公開するViewViewModelをXAML等でバインドする参照:http://msdn.microsoft.com/ja-jp/magazine/dd458800.aspx
MVVMどんなものか?なぜ必要か?関心の分離View = UI を担当Model = 純粋なデータを含むViewModel = バインディングを通じたView と Model との間のコミュニケーションSilverlight と WPF とで有効活用可能XAML ベースのデータバインディングテスト可能
MVVMどんなものか?なぜ必要か?Model :INotifyPropertyChanged、IDataErrorInfoを実装しているクラス (UI要素は持たず、Setter/Getterとしてのプロパティを持つのみ)ViewModelが取り扱うデータを保持するものViewModel:INotifyPropertyChangedを実装しているクラス (UI要素は持たず、ビジネスロジックやサーバーとの通信を担当する)多くはObservableCollectionとしてViewにバインドするデータ(Model)を取得し、保持するもの分離コードでCommandとイベントハンドラ(Command Receiver)の対応付けを行うExpression Blendのオブジェクトデータソースとしてスタティックリソース宣言が可能(ドラッグ&ドロップでUI構築) View:XAMLによるUserControl (UI要素のみ)ViewModelから提供されるデータ(Model)を2-waysデータバインドにより表示・更新するXAML側でCommandの宣言を行うできれば分離コードを一切もたないdumbコントロールとしての実装が望ましい(ViewModelの割り当てをViewの分離コードで実行することもできるが、View –ViewModelの分離が不明確になる可能性がある)
The MVVM のトライアドすべてを一緒にViewコントロールにデータを表示UI フレンドリーなエンティティや、UI 状態、アクションデータを表すエンティティViewModelModel
ModelMVVMデータを表すエンティティどこから取得したデータかは知る必要なしWCF サービス、WCF RIA Services 等々バリデーションを含む場合あり
ViewMVVM画面, UI, SilverlightのUserControlUI のルック&フィールを担当情報を表示バインディングを通じて、ViewModelとコミュニケート
ViewModelMVVMMVVM トライアドのためのロジックのメインソースModel をView と接続するViewを抽象化するView にバインドされたPublic プロパティINotifyPropertyChangedと、INotifyCollectionChangedとによる、バインディングを通じた View との会話バインディングを通じたView からの変更の通知MVVMトライアドの外部とのコミュニケートのためのサービスの呼び出し
MVVMはどこから始めるのが良いか?MVVM バリエーションView は ViewModelと何らかの関連性を持つ幾つかの実施可能なオプションView FirstView Model FirstMVVM トライアドの個々のパーツのメンテナンス
View First MVVM VariationsViewModelは View の XAMLの中のスタティックなリソースとして宣言されるExpression Blend で作れるもう一つの方法としては、ViewModelをView の分離コードで作成する
View First MVVMdemo
ViewModel FirstMVVM バリエーションView は、ViewModelのコンストラクタにインジェクト(=注入)されるExample:View がDependency Injection を使って作成されると、ViewModelが 作成される
View と ViewModelとの結び付けMVVM バリエーションView は ViewModelと何らかの形で一対になるViewModelと View は一旦作成され、中間段階を経て、その後一対となる
View とViewModelとの結び付けvm = new MyVM();view = new MyView();view.DataContext = vm;// With Unityvm = container.Resolve<IMyVM>();view = container.Resolve<MyView>();view.DataContext = vm;
Prism についていつでも選択可能Prism は、オプションのセット使いたいものだけを選んで使い、残りは無視して良し例 : モジュールとコマンドは選ぶが、イベントアグリゲーションとリージョンは無視するPrism: patterns & practices Composite Application Guidance for WPF and Silverlight sitehttp://www.codeplex.com/CompositeWPF
Prism の技術コンセプトCommandsShellModulesBootstrapperEvent AggregationContainerRegionsUnity and DI
Bootstrapperスタートするための機能アプリケーションを起動メイン UI コンテナをスタート (Shell)(必要に応じて)モジュールの登録とロードグローバルシングルトンの登録 (オプション)通常 “Bootstrapperプロジェクト” に含まれる
ShellメインViewメイン UI コンテナロードされ得るすべての Viewをホストリージョンに分割可能Shell 自身は、その中に何がロードされるかを知らない
RegionsContent エリアView を配置できる Shell の中のエリア名前を付ける必要ありコンテキストを内包可能 (オプション)RegionManagerによりRegionをメンテナンス可能
ModularitySelf Contained Modulesユーザーにとってはシームレス分割して開発される他のモジュールを参照してはならないSolution はModules に分割されるExample:City government applicationModule 1: Managing land parcelsModule 2: Traffic light administrationModule 4: City Parks Modules は、infrastructure と Models をシェアする
Dependency InjectionUnityの利用Unity 又は他の DI ツール群 (例:Ninject)テスト可能でモック作成抽象化コンテナオブジェクトにより、クラスがそのインターフェースに従って登録されるインターフェースをリクエストされたとき、コンテナは、当該インターフェースと一緒に登録されたクラスを、作成するシングルトンのサポート
クラスへのインターフェースの登録container.RegisterType	<IMyViewModel, MyViewModel>();
コンクリートClass の作成container.Resolve<IMyViewModel>();
Infrastructure共通のToolsSilverlight クラスライブラリプロジェクトモジュールのために共有可能なアイテムを含むClassesAssetsResources何の参照も作成しない純粋なライブラリ
Commandingアクションとリアクションデータバインディングを通じた View とViewModelとの間のイベントを許可ViewModelが宣言するのは Command receiverCommand は XAMLの中で宣言されるButton - ClickListBox (Selector) – SelectedCommand は、ViewModel の Command receiver にデータバインドされるルールベースで disabled/enabled 設定可能
Commanding 実装のための5つのステップ – 前提Silverlight 4 プロジェクトにおけるICommand実装は、数ステップで足りる問い合わせの多い個所なので、下記にCommanding 実装のためのシンプルなテクニックを記述する
Commanding 実装のための5つのステップ – ICommandの実装最初のステップは、ICommandインターフェースクラスの実装このクラスはCommanding アスペクトを管理する他にも色々オプションがあるところ、ここではシンプルなICommand の実装方法を紹介当該 DelegatedCommandクラスで実装するのは、ICommandのCanExecuteメソッド、Execute メソッド、そして、CaneExecuteChangedイベントこのコードはそのままコピー&ペーストして利用可能
Commanding 実装のための5つのステップ – ICommandの実装 ① public class DelegateCommand : ICommand {Func<object, bool> canExecute;	Action<object> executeAction;boolcanExecuteCache;	public DelegateCommand(Action<object> executeAction, Func<object, bool>canExecute)	{this.executeAction= executeAction;this.canExecute= canExecute;	}…
Commanding 実装のための5つのステップ – ICommandの実装 ②#region ICommandMembers	public boolCanExecute(object parameter)	{booltemp = canExecute(parameter);		if (canExecuteCache != temp)		{canExecuteCache= temp;			if (CanExecuteChanged != null)			{CanExecuteChanged(this, new EventArgs());			}		}		return canExecuteCache;	}
Commanding 実装のための5つのステップ – ICommandの実装 ②・・・続き・・・	public event EventHandlerCanExecuteChanged;	public void Execute(object parameter)	{executeAction(parameter);	}#endregion}
Commanding 実装のための5つのステップ – Commandの定義//ICommand を表示するための Public プロパティを ViewModelに追加//このプロパティは 、通常は、ボタン等により、  View にバインドされるpublic ICommandLoadProductsCommand{ get; set; }
Commanding 実装のための5つのステップ – Command の作成//ViewModelのコンストラクタの中で、 1で作成したコマンドプロパティを設定するLoadProductsCommand=  new DelegateCommand (LoadProducts, CanLoadProducts);
Commanding 実装のための5つのステップ – ViewModelの作成//ViewModelが View からアクセス可能なこと を確認する// 様々な方法があるところ、シンプルに View の XAML 中の Static Resource として作成<UserControl.Resources> 	<local:ProductViewModel									x:Key="vm"/></UserControl.Resources>
Commanding 実装のための5つのステップ – Command のバインド//ボタンコントロールを追加し、当該コマンドプロパティを ViewModelの中で作ったコマンドにバインドする//当該Command に parameter を渡したい場合には、 CommandParameterプロパティを、当該 View の中の要素にバインドできる (通常は parameter は必要ないが、例として実装) <Button Content="Load" Width="120" Command="{Binding LoadProductsCommand}" CommandParameter= 			"{Binding ElementName=FilterTextBox, Path=Text}" />
Commanding 実装のための5つのステップ – ProductViewModel完成品public class ProductViewModel : ViewModelBase{ public ProductViewModel(){this.Products= new ObservableCollection<Product>(); this.AllProducts= new ObservableCollection<Product>();this.AllProducts.Add(new Product { ProductId = 1, ProductName = "Apple" });this.AllProducts.Add(new Product { ProductId = 2, ProductName = "Orange" });this.AllProducts.Add(new Product { ProductId = 3, ProductName = "Banana" }); this.AllProducts.Add(new Product { ProductId = 4, ProductName = "Pear" })this.AllProducts.Add(new Product { ProductId = 5, ProductName = "Grape" }); this.AllProducts.Add(new Product { ProductId = 6, ProductName = "Grapefruit" });this.AllProducts.Add(new Product { ProductId = 7, ProductName = "Strawberry" })this.AllProducts.Add(new Product { ProductId = 8, ProductName = "Melon" });this.AllProducts.Add(new Product { ProductId = 9, ProductName = "Guava" });this.AllProducts.Add(new Product { ProductId = 10, ProductName = "Kiwi" });this.AllProducts.Add(new Product { ProductId = 11, ProductName = "Pineapple" });this.AllProducts.Add(new Product { ProductId = 12, ProductName = "Mango" });LoadProductsCommand= new DelegateCommand(LoadProducts, CanLoadProducts); 	} 	private void LoadProducts(object param) {	string filter = param as string ?? string.Empty; this.Products.Clear();varquery = from p in this.AllProducts	where p.ProductName.ToLower().StartsWith(filter.ToLower())	select p;foreach(var item in query) { this.Products.Add(item);	}} 	private boolCanLoadProducts(object param) {	return true } 	public ICommandLoadProductsCommand { get; set; } public ObservableCollection<Product> AllProducts { get; set; } private ObservableCollection<Product> products; 	public ObservableCollection<Product> Products { 		get		{ 				return products		}		set		{	products = value;this.FirePropertyChanged("Product");		} } }
Commanding 実装のための5つのステップ –ViewModel Basepublic abstract class ViewModelBase : INotifyPropertyChanged{public ViewModelBase(){}public event PropertyChangedEventHandlerPropertyChanged; 	protected void FirePropertyChanged(string propertyname) {varhandler = PropertyChanged; 		if (handler != null) 				handler (this, new PropertyChangedEventArgs(propertyname));}}
Event Aggregatorパブリッシャとサブスクライバ色々な種類のイベントをパブリッシュ及びサブスクライブ可能にするクロスモジュール化可能サブスクライバによるフィルタリング可能例えば:Shell の中のMenu アイテム上をクリックイベントはパブリッシャから呼び出されるイベントはサブスクライバに受信されるそれにより、当該サブスクライバは、 Shell の中の、ある Region の中の、一つのViewをロードする
Infrastructure共通のToolsInfrastructure は、Silverlight class library プロジェクトクラス、アセット、リソースを含み、モジュール間で共有される他のモジュールを参照してはならないWeb サービスをコールしてはならない純粋なライブラリ
Modular MVVM and Prismdemo
Screen Presentation EnablerScreensを生成するスクリーン間をナビゲート可能にしなければならないView 同志はお互いのことを知らない独自のScreen Conductor を作成可能Loading / UnloadingDisplaying / Hidingそのまま終了して良いですか?自分でクリーンアップしましょう!
Screen Presentation FrameworkKey PlayersScreenMVVM トライアドを管理ScreenFactoryScreen class を作成ScreenFactoryRegistryScreenFactoryディレクトリScreenConductorScreen のアクティベーションイベントをリッスンしたり、その上で動いたりするScreenCollectionScreensを収集する
Screen Conductordemo
参考情報その他Blog、チュートリアル、サンプル、等々Introducing the Earthquake Locator – A Bing Maps Silverlight Application, part 1 http://geekswithblogs.net/bdiaz/archive/2010/03/06/introducing-the-earthquake-locator--a-bing-maps-silverlight-application.aspx MVVM Light Toolkithttp://www.galasoft.ch/mvvm/getstarted/Business Apps Example for Silverlight 3 RTM and .NET RIA Services July Update: Part 25: ViewModelhttp://blogs.msdn.com/brada/archive/2009/09/07/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-viewmodel.aspxViewModel Pattern in Silverlight using Behaviorshttp://www.nikhilk.net/Silverlight-ViewModel-Pattern.aspxSimple Step for Commanding in Silverlight http://devlicio.us/blogs/christopher_bennage/archive/2010/03/03/1-simple-step-for-commanding-in-silverlight.aspx
Building Silverlight Large Scale Application Using MVVM

More Related Content

Viewers also liked (20)

EDP Energias do Brasil Presentation
EDP Energias do Brasil PresentationEDP Energias do Brasil Presentation
EDP Energias do Brasil Presentation
EDP - Energias do Brasil
 
Resources for PBL. The library : an essential partner. Author: Lorna Dodd
Resources for PBL. The library : an essential partner. Author: Lorna DoddResources for PBL. The library : an essential partner. Author: Lorna Dodd
Resources for PBL. The library : an essential partner. Author: Lorna Dodd
UCD Library
 
Using Social Networking Tools to Build Your Business
Using Social Networking Tools to Build Your BusinessUsing Social Networking Tools to Build Your Business
Using Social Networking Tools to Build Your Business
Tin Cans Unlimited
 
1Q06 Results
1Q06 Results1Q06 Results
1Q06 Results
EDP - Energias do Brasil
 
Solution semniar vs2013_multi_device-1209-new
Solution semniar vs2013_multi_device-1209-newSolution semniar vs2013_multi_device-1209-new
Solution semniar vs2013_multi_device-1209-new
Shotaro Suzuki
 
L'e-commerce in Italia - 2010
L'e-commerce in Italia - 2010L'e-commerce in Italia - 2010
L'e-commerce in Italia - 2010
Amodiovalerio Verde
 
Lifenergy Web Marketing 2012
Lifenergy Web Marketing 2012Lifenergy Web Marketing 2012
Lifenergy Web Marketing 2012
Lifenergy
 
2007 Results
2007 Results2007 Results
2007 Results
EDP - Energias do Brasil
 
Faces of italy profile italian
Faces of italy profile   italianFaces of italy profile   italian
Faces of italy profile italian
Italian Entertainment And More
 
Why the Grocery Business Must Go Social
Why the Grocery Business Must Go SocialWhy the Grocery Business Must Go Social
Why the Grocery Business Must Go Social
Tribal DDB Vancouver
 
The librarian as lecturer : experiences on the other side of the fence. Autho...
The librarian as lecturer : experiences on the other side of the fence. Autho...The librarian as lecturer : experiences on the other side of the fence. Autho...
The librarian as lecturer : experiences on the other side of the fence. Autho...
UCD Library
 
3Q08 Results
3Q08 Results3Q08 Results
3Q08 Results
EDP - Energias do Brasil
 
Processes: what should you measure?
Processes: what should you measure?Processes: what should you measure?
Processes: what should you measure?
Improvement Skills Consulting Ltd.
 
Teaching support : different perspectives, shared challenges. Authors: Ursula...
Teaching support : different perspectives, shared challenges. Authors: Ursula...Teaching support : different perspectives, shared challenges. Authors: Ursula...
Teaching support : different perspectives, shared challenges. Authors: Ursula...
UCD Library
 
SLF grantmaking with Salesforce
SLF grantmaking with SalesforceSLF grantmaking with Salesforce
SLF grantmaking with Salesforce
Improvement Skills Consulting Ltd.
 
Vs2013 multi device shosuz
Vs2013 multi device shosuzVs2013 multi device shosuz
Vs2013 multi device shosuz
Shotaro Suzuki
 
Meeting With Investors and Analists
Meeting With Investors and AnalistsMeeting With Investors and Analists
Meeting With Investors and Analists
EDP - Energias do Brasil
 
1Q09 Results
1Q09 Results1Q09 Results
1Q09 Results
EDP - Energias do Brasil
 
SaIF Science Students - Success
SaIF  Science Students - SuccessSaIF  Science Students - Success
SaIF Science Students - Success
Education Moving Up Cc.
 
Resources for PBL. The library : an essential partner. Author: Lorna Dodd
Resources for PBL. The library : an essential partner. Author: Lorna DoddResources for PBL. The library : an essential partner. Author: Lorna Dodd
Resources for PBL. The library : an essential partner. Author: Lorna Dodd
UCD Library
 
Using Social Networking Tools to Build Your Business
Using Social Networking Tools to Build Your BusinessUsing Social Networking Tools to Build Your Business
Using Social Networking Tools to Build Your Business
Tin Cans Unlimited
 
Solution semniar vs2013_multi_device-1209-new
Solution semniar vs2013_multi_device-1209-newSolution semniar vs2013_multi_device-1209-new
Solution semniar vs2013_multi_device-1209-new
Shotaro Suzuki
 
Lifenergy Web Marketing 2012
Lifenergy Web Marketing 2012Lifenergy Web Marketing 2012
Lifenergy Web Marketing 2012
Lifenergy
 
Why the Grocery Business Must Go Social
Why the Grocery Business Must Go SocialWhy the Grocery Business Must Go Social
Why the Grocery Business Must Go Social
Tribal DDB Vancouver
 
The librarian as lecturer : experiences on the other side of the fence. Autho...
The librarian as lecturer : experiences on the other side of the fence. Autho...The librarian as lecturer : experiences on the other side of the fence. Autho...
The librarian as lecturer : experiences on the other side of the fence. Autho...
UCD Library
 
Teaching support : different perspectives, shared challenges. Authors: Ursula...
Teaching support : different perspectives, shared challenges. Authors: Ursula...Teaching support : different perspectives, shared challenges. Authors: Ursula...
Teaching support : different perspectives, shared challenges. Authors: Ursula...
UCD Library
 
Vs2013 multi device shosuz
Vs2013 multi device shosuzVs2013 multi device shosuz
Vs2013 multi device shosuz
Shotaro Suzuki
 

Similar to Building Silverlight Large Scale Application Using MVVM (20)

PhoneGap勉強会 - 実践編 -
PhoneGap勉強会 - 実践編 -PhoneGap勉強会 - 実践編 -
PhoneGap勉強会 - 実践編 -
Katsumi Onishi
 
Vue入門
Vue入門Vue入門
Vue入門
Takeo Noda
 
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼうDELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
Kaz Aiso
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~
Yoshitaka Seo
 
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm patternRIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
Mami Shiino
 
MAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT apps
MAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT appsMAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT apps
MAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT apps
Shotaro Suzuki
 
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
Akira Inoue
 
クライアントサイドMVVMアーキテクチャとVue.jsをまとめたよ
クライアントサイドMVVMアーキテクチャとVue.jsをまとめたよクライアントサイドMVVMアーキテクチャとVue.jsをまとめたよ
クライアントサイドMVVMアーキテクチャとVue.jsをまとめたよ
Seki Yousuke
 
Xamarin+MVVMCross のあれこれ
Xamarin+MVVMCross のあれこれXamarin+MVVMCross のあれこれ
Xamarin+MVVMCross のあれこれ
ShinichiAoyagi
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
Akira Inoue
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
Yusuke Ando
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
Ayumi Goto
 
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
tomotoshi
 
Android sdk manual_1.02
Android sdk manual_1.02Android sdk manual_1.02
Android sdk manual_1.02
Tomohiro Kondo
 
Android sdk manual_1.02
Android sdk manual_1.02Android sdk manual_1.02
Android sdk manual_1.02
Tomohiro Kondo
 
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideLabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training Slide
Yusuke Tochigi
 
Laravel5を使って開発してみた
Laravel5を使って開発してみたLaravel5を使って開発してみた
Laravel5を使って開発してみた
Takeo Noda
 
PhoneGap勉強会 - 実践編 -
PhoneGap勉強会 - 実践編 -PhoneGap勉強会 - 実践編 -
PhoneGap勉強会 - 実践編 -
Katsumi Onishi
 
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼうDELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
Kaz Aiso
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~
Yoshitaka Seo
 
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm patternRIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
Mami Shiino
 
MAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT apps
MAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT appsMAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT apps
MAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT apps
Shotaro Suzuki
 
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
Akira Inoue
 
クライアントサイドMVVMアーキテクチャとVue.jsをまとめたよ
クライアントサイドMVVMアーキテクチャとVue.jsをまとめたよクライアントサイドMVVMアーキテクチャとVue.jsをまとめたよ
クライアントサイドMVVMアーキテクチャとVue.jsをまとめたよ
Seki Yousuke
 
Xamarin+MVVMCross のあれこれ
Xamarin+MVVMCross のあれこれXamarin+MVVMCross のあれこれ
Xamarin+MVVMCross のあれこれ
ShinichiAoyagi
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
Akira Inoue
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
Yusuke Ando
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
Ayumi Goto
 
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
tomotoshi
 
Android sdk manual_1.02
Android sdk manual_1.02Android sdk manual_1.02
Android sdk manual_1.02
Tomohiro Kondo
 
Android sdk manual_1.02
Android sdk manual_1.02Android sdk manual_1.02
Android sdk manual_1.02
Tomohiro Kondo
 
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideLabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training Slide
Yusuke Tochigi
 
Laravel5を使って開発してみた
Laravel5を使って開発してみたLaravel5を使って開発してみた
Laravel5を使って開発してみた
Takeo Noda
 
Ad

More from Shotaro Suzuki (20)

This is how our first offline technical event in three years was able to succ...
This is how our first offline technical event in three years was able to succ...This is how our first offline technical event in three years was able to succ...
This is how our first offline technical event in three years was able to succ...
Shotaro Suzuki
 
Introducing the new features of the Elastic 8.6 release.pdf
Introducing the new features of the Elastic 8.6 release.pdfIntroducing the new features of the Elastic 8.6 release.pdf
Introducing the new features of the Elastic 8.6 release.pdf
Shotaro Suzuki
 
NET MAUI for .NET 7 for iOS, Android app development
 NET MAUI for .NET 7 for iOS, Android app development  NET MAUI for .NET 7 for iOS, Android app development
NET MAUI for .NET 7 for iOS, Android app development
Shotaro Suzuki
 
What's New in the Elastic 8.5 Release
What's New in the Elastic 8.5 ReleaseWhat's New in the Elastic 8.5 Release
What's New in the Elastic 8.5 Release
Shotaro Suzuki
 
Centralized Observability for the Azure Ecosystem
Centralized Observability for the Azure EcosystemCentralized Observability for the Azure Ecosystem
Centralized Observability for the Azure Ecosystem
Shotaro Suzuki
 
What's New in the Elastic 8.4 Release
What's New in the Elastic 8.4 ReleaseWhat's New in the Elastic 8.4 Release
What's New in the Elastic 8.4 Release
Shotaro Suzuki
 
Power Apps x .NET ~ Transforming Business Applications with Fusion Development
Power Apps x .NET ~ Transforming Business Applications with Fusion DevelopmentPower Apps x .NET ~ Transforming Business Applications with Fusion Development
Power Apps x .NET ~ Transforming Business Applications with Fusion Development
Shotaro Suzuki
 
devreljapan2022evaadvoc-final.pdf
devreljapan2022evaadvoc-final.pdfdevreljapan2022evaadvoc-final.pdf
devreljapan2022evaadvoc-final.pdf
Shotaro Suzuki
 
elastic-mabl-co-webinar-20220729
elastic-mabl-co-webinar-20220729elastic-mabl-co-webinar-20220729
elastic-mabl-co-webinar-20220729
Shotaro Suzuki
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
Discover what's new in the Elastic 8.3 release - Find, monitor, and protect e...
Discover what's new in the Elastic 8.3 release - Find, monitor, and protect e...Discover what's new in the Elastic 8.3 release - Find, monitor, and protect e...
Discover what's new in the Elastic 8.3 release - Find, monitor, and protect e...
Shotaro Suzuki
 
Building a search experience with Elastic – Introducing Elastic's latest samp...
Building a search experience with Elastic – Introducing Elastic's latest samp...Building a search experience with Elastic – Introducing Elastic's latest samp...
Building a search experience with Elastic – Introducing Elastic's latest samp...
Shotaro Suzuki
 
Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...
Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...
Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...
Shotaro Suzuki
 
Elastic x Microsoft Azure Integration Evolution - Integrated Monitoring for S...
Elastic x Microsoft Azure Integration Evolution - Integrated Monitoring for S...Elastic x Microsoft Azure Integration Evolution - Integrated Monitoring for S...
Elastic x Microsoft Azure Integration Evolution - Integrated Monitoring for S...
Shotaro Suzuki
 
Building 3D mobile apps using Power Apps Mixed Reality controls, Azure SQL Da...
Building 3D mobile apps using Power Apps Mixed Reality controls, Azure SQL Da...Building 3D mobile apps using Power Apps Mixed Reality controls, Azure SQL Da...
Building 3D mobile apps using Power Apps Mixed Reality controls, Azure SQL Da...
Shotaro Suzuki
 
What's New in the Elastic 8.2 Release - Seamless User Experience with Search -
What's New in the Elastic 8.2 Release - Seamless User Experience with Search -What's New in the Elastic 8.2 Release - Seamless User Experience with Search -
What's New in the Elastic 8.2 Release - Seamless User Experience with Search -
Shotaro Suzuki
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
Building Software Reliability through Distributed Tracing.pdf
Building Software Reliability through Distributed Tracing.pdfBuilding Software Reliability through Distributed Tracing.pdf
Building Software Reliability through Distributed Tracing.pdf
Shotaro Suzuki
 
Building a Flutter Development Environment with VSCode and Useful Extensions
Building a Flutter Development Environment with VSCode and Useful ExtensionsBuilding a Flutter Development Environment with VSCode and Useful Extensions
Building a Flutter Development Environment with VSCode and Useful Extensions
Shotaro Suzuki
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
This is how our first offline technical event in three years was able to succ...
This is how our first offline technical event in three years was able to succ...This is how our first offline technical event in three years was able to succ...
This is how our first offline technical event in three years was able to succ...
Shotaro Suzuki
 
Introducing the new features of the Elastic 8.6 release.pdf
Introducing the new features of the Elastic 8.6 release.pdfIntroducing the new features of the Elastic 8.6 release.pdf
Introducing the new features of the Elastic 8.6 release.pdf
Shotaro Suzuki
 
NET MAUI for .NET 7 for iOS, Android app development
 NET MAUI for .NET 7 for iOS, Android app development  NET MAUI for .NET 7 for iOS, Android app development
NET MAUI for .NET 7 for iOS, Android app development
Shotaro Suzuki
 
What's New in the Elastic 8.5 Release
What's New in the Elastic 8.5 ReleaseWhat's New in the Elastic 8.5 Release
What's New in the Elastic 8.5 Release
Shotaro Suzuki
 
Centralized Observability for the Azure Ecosystem
Centralized Observability for the Azure EcosystemCentralized Observability for the Azure Ecosystem
Centralized Observability for the Azure Ecosystem
Shotaro Suzuki
 
What's New in the Elastic 8.4 Release
What's New in the Elastic 8.4 ReleaseWhat's New in the Elastic 8.4 Release
What's New in the Elastic 8.4 Release
Shotaro Suzuki
 
Power Apps x .NET ~ Transforming Business Applications with Fusion Development
Power Apps x .NET ~ Transforming Business Applications with Fusion DevelopmentPower Apps x .NET ~ Transforming Business Applications with Fusion Development
Power Apps x .NET ~ Transforming Business Applications with Fusion Development
Shotaro Suzuki
 
devreljapan2022evaadvoc-final.pdf
devreljapan2022evaadvoc-final.pdfdevreljapan2022evaadvoc-final.pdf
devreljapan2022evaadvoc-final.pdf
Shotaro Suzuki
 
elastic-mabl-co-webinar-20220729
elastic-mabl-co-webinar-20220729elastic-mabl-co-webinar-20220729
elastic-mabl-co-webinar-20220729
Shotaro Suzuki
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
Discover what's new in the Elastic 8.3 release - Find, monitor, and protect e...
Discover what's new in the Elastic 8.3 release - Find, monitor, and protect e...Discover what's new in the Elastic 8.3 release - Find, monitor, and protect e...
Discover what's new in the Elastic 8.3 release - Find, monitor, and protect e...
Shotaro Suzuki
 
Building a search experience with Elastic – Introducing Elastic's latest samp...
Building a search experience with Elastic – Introducing Elastic's latest samp...Building a search experience with Elastic – Introducing Elastic's latest samp...
Building a search experience with Elastic – Introducing Elastic's latest samp...
Shotaro Suzuki
 
Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...
Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...
Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...
Shotaro Suzuki
 
Elastic x Microsoft Azure Integration Evolution - Integrated Monitoring for S...
Elastic x Microsoft Azure Integration Evolution - Integrated Monitoring for S...Elastic x Microsoft Azure Integration Evolution - Integrated Monitoring for S...
Elastic x Microsoft Azure Integration Evolution - Integrated Monitoring for S...
Shotaro Suzuki
 
Building 3D mobile apps using Power Apps Mixed Reality controls, Azure SQL Da...
Building 3D mobile apps using Power Apps Mixed Reality controls, Azure SQL Da...Building 3D mobile apps using Power Apps Mixed Reality controls, Azure SQL Da...
Building 3D mobile apps using Power Apps Mixed Reality controls, Azure SQL Da...
Shotaro Suzuki
 
What's New in the Elastic 8.2 Release - Seamless User Experience with Search -
What's New in the Elastic 8.2 Release - Seamless User Experience with Search -What's New in the Elastic 8.2 Release - Seamless User Experience with Search -
What's New in the Elastic 8.2 Release - Seamless User Experience with Search -
Shotaro Suzuki
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
Building Software Reliability through Distributed Tracing.pdf
Building Software Reliability through Distributed Tracing.pdfBuilding Software Reliability through Distributed Tracing.pdf
Building Software Reliability through Distributed Tracing.pdf
Shotaro Suzuki
 
Building a Flutter Development Environment with VSCode and Useful Extensions
Building a Flutter Development Environment with VSCode and Useful ExtensionsBuilding a Flutter Development Environment with VSCode and Useful Extensions
Building a Flutter Development Environment with VSCode and Useful Extensions
Shotaro Suzuki
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
Ad

Building Silverlight Large Scale Application Using MVVM

Editor's Notes

  • #9: 悩ましいのは、View上のいろんなイベント処理をいかに分離コード無しでコントロールするか、という点理想的にはViewはBehaviorを駆使して・・・、と行きたいところだが、業務系のシナリオを考えると難しい?スライド27 Commanding、28にあるEvent Aggregator、このあたりの明確な指針を出したい
  • #39: // Warning: DEMO CODE AHEAD // Your ViewModel should not define your data for your Model :-) // Instead, it could make a call to a service to get the data for the Model.
  • #40: // Warning: DEMO CODE AHEAD // Your ViewModel should not define your data for your Model :-) // Instead, it could make a call to a service to get the data for the Model.