![Page 1: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/1.jpg)
![Page 2: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/2.jpg)
Composite Applicatin Guidance
Para Windows Presentation Foundation
Vasco Oliveira
Team Leader, Microfil
![Page 3: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/3.jpg)
Agenda
• O que é o Prism?• Modularidade• Composição UI• Padrões de Apresentação• Referências
![Page 4: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/4.jpg)
Prism – Porquê?
• Problemáticas:– Aplicações cliente são um desafio– Como as tornar dinâmicas, customizáveis,
extensíveis e fácilmente testáveis?
• Solução:– Segmentar a aplicação– Gerir interdependências– Compôr a aplicação dinâmicamente
• Prism - Patterns For Composite Client Apps
![Page 5: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/5.jpg)
Prism – "What's in the box"?
• Prism 1.0 – WPF– Lançado em Julho de 2008
• Prism 2.0 – WPF e Silverlight– Q1 2009 – (Actualmente na Drop 10)
• Prism – Composite Client Application Guidance para WPF e Silverlight– Libraries– Reference Implementations (RI)– Documentação– Quick-Starts e How-To’s– Comunidade – CodePlex
![Page 6: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/6.jpg)
• File -> Open ->CWPF\Source\StockTraderRI\StockTraderRI.sln
• Abrir o Visual Studio
In the box: Reference Implementation
![Page 7: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/7.jpg)
Compor UI - RegiõesCompor UI - Regiões
Composite Application Guidance: Conceitos
Bootstrapper
DI/IoC Containers
Módulos
Shell e View
Eventos e Comandos
Bootstrapper
DI/IoC Containers
Módulos
Shell e View
Eventos e Comandos
![Page 8: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/8.jpg)
Bootstrapper
![Page 9: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/9.jpg)
Bootstrapper
• Responsável pela inicialização• Fases:
– Configuração– Regiões– Shell– Módulo
![Page 10: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/10.jpg)
Container
![Page 11: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/11.jpg)
Container
• CAL suporta vários DI Containers– IContainerFacade
• Implementação Unity– UnityContainerAdapter
![Page 12: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/12.jpg)
Módulos
![Page 13: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/13.jpg)
Módulos – O que são?
• Assemblies da aplicação– Colecção de componentes relacionados– Serviços, UI, Acesso a dados
• Unidade de desenvolvimento– Desenvolvimento independente– Testes independentes
![Page 14: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/14.jpg)
Módulos - Carregamento• ModuleLoader - Catalogo de Modulos• Loading estático, por configuração, dinâmico• Inicialização em background ou On-Demand
Module Loader
![Page 15: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/15.jpg)
Módulos
• Critérios de segmentação:– Funcionalidades específicas– Sub-sistemas– Serviços– Sistemas Line of Business
• Separação de equipas
![Page 16: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/16.jpg)
Módulos – Loading estático
public class MyBootstrapper : UnityBootstrapper{ ... protected override IModuleEnumerator GetModuleEnumerator() { return new StaticModuleEnumerator() .AddModule(typeof(SomeModule)) .AddModule(typeof(AnotherModule), "SomeModule") .AddModule(typeof(YetAnotherModule), "AnotherModule","SomeModule"); }}
Dependências
Module Type
Localiza MódulosRetorna módulos
Referenciados estáticamente
![Page 17: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/17.jpg)
Módulos - Inicialização
public class SomeModule : IModule public SomeModule(SomeDependency myDependency) {...} public void Initialize() { RegisterViewsAndServices(); //Show views here; }}
Dependência injectada
Lógica de Inicialização
![Page 18: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/18.jpg)
Dividir uma aplicação em módulos por configuração
demo
![Page 19: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/19.jpg)
Módulos – Loading Dinâmico
public class MyBootstrapper : UnityBootstrapper{ ... protected override IModuleEnumerator GetModuleEnumerator() { return new DirectoryLookupModuleEnumerator(@".\Modules"); }}
“Hot folder”
![Page 20: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/20.jpg)
Loading dinâmico de módulos
demo
![Page 21: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/21.jpg)
Composição do UI
![Page 22: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/22.jpg)
Regiões• Shell – Janela “Host” da aplicação• Regions – Áreas definidas para injecção de
Views• Views – UI e lógica de apresentação
Region Region
Region
<ContentControl RegionManager.RegionName= “DetailsRegion” />
IPortfolioPresentationModel presentationModel = …;
IRegion mainRegion = regionManager.Regions[ "MainRegion" ];
mainRegion.Add( presentationModel.View );
<ItemsControl RegionManager.RegionName= "MainRegion">
![Page 23: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/23.jpg)
Regiões – Registo
MyShell.xaml
RegionName attached property
Maior parte das vezes, Regions são
ItemsControls<TabControl x:Name="OrderTab" ItemContainerStyle="..." CAL:RegionManager.RegionName="OrderRegion" />
![Page 24: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/24.jpg)
Regiões – Exibição
public class MyModule : IModule{ public void Initialize (IRegionManager manager) { RegisterViewsAndServices();
IRegion orderRegion = manager.GetRegion("OrderRegion"); var myOrderView = new OrderView(myOrder); orderRegion.Add(myOrderView); }}
RegionManager é necessário
Inicialização da View
Obtenção da Região
View é exibida
![Page 25: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/25.jpg)
Regiões – Templating ("WPF way")
public class MyModule : IModule{ public void Initialize(IRegionManager manager) { RegisterViewsAndServices();
IRegion orderRegion = manager.GetRegion("OrderRegion"); orderRegion.Add(myOrder); }}
Objecto é adicionado directamente
![Page 26: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/26.jpg)
Compondo o UI com Regions e Views
demo
![Page 27: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/27.jpg)
Commands
![Page 28: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/28.jpg)
Commands
Submit
OrderDetails
Submit
OrderDetails
Submit
OrderDetails
Delegate Commands
Composite Command
Submit All
![Page 29: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/29.jpg)
Commands - Binding
<StackPanel Orientation="Horizontal"> <Button Name="SubmitAllToolbarButton" Command="{x:Static inf:Commands.SubmitOrdersCommand}"> Submit All </Button></StackPanel
Atribuir Command
![Page 30: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/30.jpg)
public class OrderDetailsPresenter : IOrderDetailsPresenter{ private ICommand orderSubmitCommand;
public OrderDetailsPresenter(...) { orderSubmitCommand = …
// Register the commandCommands.SubmitOrdersCommand.RegisterCommand(orderSubmitCommand); }}
CompositeCommands - Registar
Registar command como filho
![Page 31: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/31.jpg)
Commands - Handling
public class OrderDetailsPresenter : IOrderDetailsPresenter{ private ICommand orderSubmitCommand;
public OrderDetailsPresenter (IOrderDetailsView view, { orderSubmitCommand = new DelegateCommand(Submit, CanSubmit);
// Register the command Commands.SubmitOrdersCommand.RegisterCommand(orderSubmitCommand); }
public void Submit(object params) {...}
public bool CanSubmit(object params) {...}
}
Tratar Execute e CanExecute
![Page 32: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/32.jpg)
Usando Commands para lidar com eventos no UI
demo
![Page 33: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/33.jpg)
Events
![Page 34: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/34.jpg)
Event AggregationEventAggregator
Service
OrderReceived
OrderManager
OrderListPresenter
Subscreve
OrderModule
OrderService
Publica Recebe
![Page 35: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/35.jpg)
Event Aggregation – O evento...
public class OrderReceivedEvent : CompositeEvent<Order>> {}
Separa publisher e subscriber
![Page 36: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/36.jpg)
Event Aggregation – Subscrição...
public class SomePresenter { public OrderListPresenter(IEventAggregator eventAggregator) { //subscribing to the event eventAggregator.GetEvent<OrderReceivedEvent>(). Subscribe(OnOrderReceived, ThreadOption.UIThread); }
private void OnOrderReceived(Order order) { ... }}
Contentor de eventos
Obter o evento
Subscrever o eventoReferenciar o
thread correcto
![Page 37: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/37.jpg)
Event Aggregation – Subscrição... (2)public class SomePresenter { public OrderListPresenter(IEventAggregator eventAggregator) { // Subscrever evento eventAggregator.GetEvent<OrderReceivedEvent>(). Subscribe(OnOrderReceived, ThreadOption.UIThread, false, o=>o.Priority == Priority.High);
); }
private void OnOrderReceived(Order order) { ... }}
Manter subscriber activo
Predicado de filtragem de eventos
![Page 38: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/38.jpg)
Event Aggregation - Publicar
public class OrderService : IOrderService { public OrderService(IEventAggregator eventAggregator) {...}
private void OrderReceived(Order) { // Publicar EventAggregator.GetEvent<OrderReceivedEvent>(). Publish(Order); }} Publicar o
evento
![Page 39: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/39.jpg)
Publicar e subscrever eventos
demo
![Page 40: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/40.jpg)
Patterns de Apresentação
![Page 41: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/41.jpg)
Patterns de Apresentação• Prism 1.0
– Supervising Controller– Presentation Model
• Prism 2.0– Mais e melhores guias de Patterns– “Model-View-ViewModel”– Model Presentation State (Não estado de UI)– Thin Views – Data Templates– ViewModel Commands– ViewModel Attached Property
PresentationModel
Model
View
![Page 42: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/42.jpg)
Onde encontrar?
• www.microsoft.com/compositewpf• www.codeplex.com/compositewpf
![Page 43: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/43.jpg)
Deixem-se envolver...
• www.codeplex.com/compositewpfcontrib
![Page 44: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/44.jpg)
Patrocinadores
![Page 45: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/45.jpg)
Q&A
![Page 46: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/46.jpg)
Software em versão completa para avaliaçãoSuporte técnico 24x7 para incidentesAcesso antecipado às versões betaMicrosoft OfficeSoftware Assuranceformação gratuita ….e muito mais.
www.microsoft .com/portuga l /msdn/subscr icoes
Subscrições
MSDN
![Page 47: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/47.jpg)
www.microsof t . com/ learn ing /mcp/off ers /secondshot
Certificações Microsoft
![Page 48: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/48.jpg)
MSDN Flash
www.microsoft .com/portuga l /msdn/msdnfl ash
Subscreva a MSDN Flash
Convide Amigos a seguirem o
seu exemplo…
… e ganhe livros!!
![Page 49: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/49.jpg)
www.microsoft .com/portuga l /msdn/webcasts4share
Participe nos próximos ciclos
Traga Amigos a assistir e …
…ganhe uma Xbox, trolleys e livros
Webca
sts
![Page 50: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/50.jpg)
[BI] Resort
GASP
GetCertified
GetVirtual
Mundo Móvel
PocketPT
PontoNetPT
UC’ed
ScrumPT
ZoomIn
Espaço COMUNIDADES
Um ponto de encontro
especial !!!
![Page 51: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/51.jpg)
QuestionárioA sua opinião é importante!Complete o questionário de avaliação e devolva-o no balcão da recepção.
![Page 52: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil](https://reader034.vdocuments.com.br/reader034/viewer/2022051615/552fc12a497959413d8ccc0a/html5/thumbnails/52.jpg)
Instituto Superior TécnicoCampus do Taguspark