52

Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil

Embed Size (px)

Citation preview

Page 1: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil
Page 2: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil

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

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

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

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

• 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

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

Bootstrapper

Page 9: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil

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

Container

Page 11: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil

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

Módulos

Page 13: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil

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

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

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

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

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

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

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

Loading dinâmico de módulos

demo

Page 21: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil

Composição do UI

Page 22: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil

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

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

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

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

Compondo o UI com Regions e Views

demo

Page 27: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil

Commands

Page 28: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil

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

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

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

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

Usando Commands para lidar com eventos no UI

demo

Page 33: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil

Events

Page 34: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil

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

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

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

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

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

Publicar e subscrever eventos

demo

Page 40: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil

Patterns de Apresentação

Page 41: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil

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

Onde encontrar?

• www.microsoft.com/compositewpf• www.codeplex.com/compositewpf

Page 43: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil

Deixem-se envolver...

• www.codeplex.com/compositewpfcontrib

Page 44: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil

Patrocinadores

Page 45: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil

Q&A

Page 46: Composite Applicatin Guidance Para Windows Presentation Foundation Vasco Oliveira Team Leader, Microfil

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

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

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

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

[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

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

Instituto Superior TécnicoCampus do Taguspark