MVVM senza “fronzoli”con Caliburn MicroMarco Amendolamarco.amendola@domusdotnet.orgmarcoamendola.wordpress.comtwitter.com/marcoamendolahashtag: #MVVMCM
AgendaDa «vanilla» MVVM a Caliburn.Micro
Break
Action Messaging
UI Composition
Application Model
CoroutineE’ ufficiale: MVVM è comodo Migliore organizzazione del codiceMaggiore libertà nel designFacilità nella scrittura dei test
ma richiede troppi fronzoliCredits: artfinding.com
dobbiamo renderlo cosìCredits: movado.com
Approccio minimalistaCogliere le caratteristiche essenzialiEliminare le «cerimonie» superflue del MVVMRendere semplici le operazioni più comuni
approccio minimalista: più spazio al nostro codicepublic class MyCode{ }
Cogliere le caratteristiche essenzialiComunicazione ViewModel -> View Comunicazione View -> ViewModelCiclo di vita dei ViewModelUI composition (dinamica)
Eliminare le «cerimonie» superflue del MVVMAssociazione delle View con i ViewModelIstanziazione dei Relay CommandConfigurazione dei bindingImplementazione di INotifyPropertyChanged
Rendere semplici le operazioni più comuniConvenzioniUI thread marshalingUI compositionGestione Window/DialogOperazioni asincrone
DemoShared Bookshelf Manager(da «vanilla» MVVM a Caliburn.Micro)
Break             .         Credits: school.salescrunch.com
MVVM senza “fronzoli”con Caliburn Microseconda parteMarco Amendolamarco.amendola@domusdotnet.orghttp://marcoamendola.wordpress.comhttp://twitter.com/marcoamendola
Action MessagingSono dei Command più «potenti»Separazione Trigger/ActionBubblingParametri contestualiEsecuzione mediata
UI CompositionDue diversi approcci:View-firstE’ la view che guida la composizioneModel-firstSegue la struttura e le «indicazioni» (anche dinamiche) del VM
UI CompositionTecnica basata su binding e templateParentViewAreaArea(rappresentazione del) ViewModel
UI CompositionTecnica basata su binding e template
UI CompositionTecnica basata su binding e templateParentViewModelAreaAreaViewModel
UI CompositionTecnica basata su binding e templateParentViewArea multi-elementoAreaViewModelViewModelViewModel
UI CompositionGli strumenti di Caliburn MicroCredits: thinkgeek.com
UI CompositionGli strumenti di Caliburn MicroView.Modelabilita View Location e convenzioniView.ContextConsente view multiple sullo stesso VM(se proprio dovesse servire)Credits: faqs.org
DemoShared Bookshelf Manager(Application Model tour)
Application Model(Screen & Conductor)Composizione dinamicaCiclo di vitaConsenso alla chiusuraWindow Manager
Coroutine Cosa sono?Wikipedia: «Coroutines are computer program components that generalize subroutines to allow multiple entry points for suspending and resuming execution at certain locations.»A cosa servono?Chiamate asincroneTestabilitàMigliore leggibilità
Coroutine Meccanismo di funzionamento«Task» singolo
Coroutine Meccanismo di funzionamentoEsecuzione sequenziale sincrona
Coroutine Meccanismo di funzionamentoEsecuzione sequenziale asincronaBACBACABC
Coroutine Meccanismo di funzionamentoCreazione taskAABBCC ?
OK, questo era più complicato…Credits: ibiblio.org
Tutto il restoEvent aggregatorView.Bind approccio view-firstViewAwarecaching e accesso alla view Convention Manager

MVVM senza fronzoli con Caliburn.Micro

Editor's Notes

  • #4 Ci piace, ma…
  • #9 Comunicazione ViewModel -> View Binding proprietàUso di INPC come comandi indirettiMVPEvent aggregatorComunicazione View -> ViewModelBinding proprietà ActionsEvent aggregatorCiclo di vita dei ViewModelNon garantito da XAMLView-First, Model-FirstUI CompositionView-Driven, Model-DrivenTemplating
  • #10 Associare le view con i VM- creazione istanze, impostazione DataContextRelay Command- istanziazione, aggancio e aggiornamento dei metodi «guardia»Binding-configurazione di binding mode, validazione e converter
  • #11 ConvenzioniView locationProperty binding + configurazioneAction bindingAuto templateUI thread marshalingNoioso ed error-proneUI compositionGuidare dal VMLegarsi a interfacceGestione Window/DialogGuidare da VMNo dipendenze da Sys.WinPlatform abstractionOperazioni asincroneEventiTestabilità
  • #15 Separazione Trigger/ActionAzione/Reazione, Causa/EffettoPiù causeSintassi estesaBubblingParametri contestualiEsecuzione mediata
  • #24 Composizione dinamicaConductor<>, .Collection.OneActive, .AllActiveCambiare schermoAggiungere o rimuovere da un setPannelli multipliCiclo di vitaInizializzazione/ChiusuraAttivazioneConsenso alla chiusura- Asincrono!Window Manager
  • #26 Task singoloRappresentazione con oggettoEsecuzioneAltri prima e dopoLa freccia è il tempo
  • #27 Esecuzione sequenziale sincronaSequenzaNessuno spazio per altriSi blocca la UI
  • #28 Esecuzione sequenziale asincronaInizio, fineC’è spazio per altri
  • #29 CreazioneArray (tutto insieme)Iterator (lazy)