UI Composition
-
Upload
dotnetmarche -
Category
Technology
-
view
104 -
download
1
description
Transcript of UI Composition
Paolo Possanzini
UI CompositionProblemi e “possibili” Soluzioni
Mauro Servienti
Agenda
• UI Composition– Ma pecccchè?– I problemi;– Le possibili soluzioni;
• Toolkit:– cosa offre il mercato;– farselo, è pensabile?
UI COMPOSITION: PERCHÈ?È un investimento decisamente onoreso, ne vale la pena?
Bella domanda...
• Cliente: necessità di modularizzare:– Acquistare in configurazioni diverse;– Installare in configurazioni diverse;
• Team: necessità di gestire e lavorare:– Team grande o distribuito;– Soluzione/i di dimensioni ingestibili in VS;– Tempi di sviluppo diversi dei “moduli” che non
devono condizionarsi/bloccarsi a vicenda;• Un esempio per tutti: Visual Studio;
UI COMPOSITION: I PROBLEMIOk, chiaro... Ma a che costo?
Mamma mia...
• ...oltre a tutto quello che M-V-VM si porta dietro:– Region management;– La comunicazione tra attori che non si conoscono;– Gestione del ciclo di vita del modulo/plugin;– Obbligatorietà di IoC perchè bisogna avere a che
fare con i contratti... altrimenti ciccia plugin;
Semplicità, adesso è tutto così facile...“Region... perchè sei tu region”
Toolbars e Documents sono Region in cui poter iniettare contenuti a runtime
xxxDetails è una Region in cui poter iniettare contenuti contestuali a runtime
Semplicità...adesso un po’ meno...
Ecco perchè per mettere M-V-VM al centro del mondo è necessario sporcarsi le mani
Region: statiche e dinamiche• Toolbars e Documents sono region “statiche”;– Referenziabili per “nome”;
• Ma se avessimo più Window?
• IRegionManager.GetRegion( name ) ?
CustomerWindow: Instance 1“ContentRegion”
CustomerWindow: Instance 2“ContentRegion”
• svc.RegisterRegion( name, view );• svc.GetManager( view ).GetRegion( name );
RegionService, RegionManager, Region
• Wpf e Xaml vi danno la massima libertà: lunga vita alle Attached Property;
<ContentPresenter rg:RegionService.Region="{rg:ContentPresenterRegion 'myRegionName'}" />
Come comunicano?
l’elemento selezionato deve “attivare” un Command nella toolbar
La variazione di selezione deve essere intercettata per iniettare i contenuti contestuali
Una toolbar contestuale compare quando visualizziamo contenuti contestuali
Il postino suona sempre 2 volte
• I vari attori, aka Module, non si conoscono ma hanno la necessità di comunicare tra loro:– Dobbiamo definire una lingua nota a tutti;– Dobbiamo designare qualcuno come postino;
Italiani...! La shell si avvia!
• Il nostro postino trasporta messaggi: ViewModelLoading<IShellViewModel>()
• che contengono informazioni:
• che possiamo usare a nostro uso e consumo:
var regionManager = this.regionService.GetRegionManager( this.View );var msg = new ViewModelLoading<IShellViewModel>( this, regionManager );this.broker.Dispatch( msg );
this.broker.Subscribe<ViewModelLoading<IShellViewModel>>( this, msg => {
var viewModel = this.provider.GetService( typeof( IMyContentViewModel ) )msg.RegionManager[ "myRegionName" ].Add( viewModel.View );
} );
ANATOMIA: ...DAL VIVO!... Si ma come è fatto?
Struttura
• Separazione di contratto e implementazione;– ComponentModel;– Runtime;
• Ma...qualcuno deve conoscere il tutto:– Bootstrapper: è l’equivalente del file di
configurazione;
TOOLKIT, TOOLKIT E ANCORA TOOLKIT...
Cosa offre il mercato?
Realizzare un toolkit...
• ... Il gioco vale la candela?• Che requisiti dobbiamo soddisfare:– Gestione delle region;– Comunicazione;– Gestione del ciclo di vita dei moduli;
• Ma anche (ecco perchè forse ha senso):– Un set di ViewModel di base;– Un motore di validazione degno del suo nome;– Localizzazione;
• e... Silverlight?
DEMO... Si m... Io continuo a non capire...
NIENTE DOMANDE...? :-)Fate i bravi....