SlideShare a Scribd company logo
1 of 40
BROKERING...
Silverlight & Wcf using a «more» SOA point-of-view

  Mauro Servienti                    Giorgio Formica
  Senior Software Architect @ Gaia   Senior Developer @ Gaia
  mauro.servienti@gaia.is.it         giorgio.formica@gaia.is.it

  Microsoft MVP – Visual C# / MCTS
  http://milestone.topics.it         http://io.non.ho.un.blog....
The Agenda
• The big picture:
  • Requisiti;
  • Information flow;
  • Architecture;


• Technical overview:
  • Requirements;
  • Problems;
  • Solutions;


• Composition:
  • UI Composition;
  • Module Composition;
  • Touchin’ the surface of M-V-VM;
THE BIG PICTURE
Where do we want to go?
Distribuzione geografica
• Necessità di supportare un ambiente geograficamente
 distribuito;

 • Possibilità di supportare scalabilità orizzontale;
 • Possibilità di supportare idempotenza;
 • Possibilità di supportare versioning di client e server non sincroni;
Atomicità
• Necessità di poter decidere il «livello di atomicità» della
 comunicazione in fase di inizio della stessa;

  • Possibilità di parallelizzare un set di chiamate;
  • Possibilità di serializzare un set di chiamate;
  • Conseguente possibilità di gestire la transazionalità di un set di
   chiamate;
Logica di business
• Necessità di introdurre nuovi scenari di comunicazione
 post deploy senza dover apportare modifiche strutturali al
 backend dei servizi;

  • Possibilità di cambiare la logica di gestione server-side a caldo;
  • Possibilità di cambiare il livello di «composition» server-side;
  • Possibilità di gestire dei workflow server-side;
The big picture


                        Somewhere
       Client            in time...          Service




• Sappiamo molto poco: mondi separati dove la connettività
 non è cosa certa;
«high level» information flow
       Client

                                  Somewhere
     Operation                     in time...      Service


                 Request(s)



                                                  Operation
• Un’operazione è atomica: certo…è una :-)         Handler
• Un’operazione può portare con se più
  richieste e più risposte: è una e «trina» ;-)    Request
• Il servizio non conosce gli handler;            Handler(s)

• Gli handler non conoscono il servizio;
• Gli handler (msg) possono conoscersi:
  workflow;
IF YOU WANT BLOOD...
...you’ve got it! :-)
Technical problems
• Siamo abituati ad una comunicazione con i servizi
  «strongly typed at method level»;
• Il proxy è generato da Visual Studio;
• Svcutil.exe genera dei proxy/dto per ogni tipo ma
  vedremo che a noi non va sempre bene...;

• In realtà Wcf non sa nulla di «metodi» e «classi» ragiona
  solo in termini di messaggi e azioni (e non solo...);
• Ma il messaggio di Wcf è troppo «raw» per i nostri gusti;
• Abbiamo quindi la necessità di essere strongly-typed ma
  anche generici… che simpatico…;
Operation: Request/Response
Messaging: Request/Response
Service: Entry Point
Service: Operation handling
Service: Message handling
DEMO
A first approach to Kharon
Recap
• Ad alto livello è tutto molto semplice:
  • «banale» servizio Wcf, senza codice;
  • Messaggi;
  • Handlers;
• Se è tutto staticamente noto a compile time
  possiamo anche usare svcutil.exe;
• La chiamata è una normale chiamata a Wcf;
• Un «blobbone» di reference giusto per
  semplificare il deploy;
Tutto facilissimo, non trovate?
• L’infrastruttura (Caronte) vi
 offre:
  • Il trasporto: lo stige;
  • la forma delle cose da
    trasportare: le anime;


• A vostro carico c’è:
  • La gestione delle anime ;-)
  • Il client…ovviamente :-)
Si…certo certo…bravo bravo…ma?
                   • Tutto ha un inizio…




• E una fine :-)
Oh my God… <cit.>
• Perchè tutto ciò?
  • Abbiamo bisogno di Inversion of Control @ Service Instance
    Level;
  • e… ServiceLocator è il male :-)
• A questo punto è tutto facile:
Non proprio tutto facilissimo…
 • Ma… gli attributi di Wcf per il DataContractSerializer?




• «ServiceKnownType» & «ServiceKnownTypesProvider»
Configuration & Discovery




                    Why no auto-discovery?
                    • Client docet :-)
                    • Troppi vincoli sul deploy;
Under the Hood with «Windsor»
PAUSA?
Sappiate che vi capiamo…
CLIENT POINT-OF-VIEW
Client delle mie brame…
Client Agenda :-)
• I’m the client and this is my language:
   • Client comunication approach;


• Adapt yourself:
  • Server model – dto – client model;


• Compose your world :-)
  • UI Composition;
  • Module Composition;


• A lap around Model-View-ViewModel:
  • Client side brokering;
Il client e la comunicazione
• Operations & Messages;




• Errori a livello di «Operation»;
• Errori a livello di singolo
 «Message»
Il client e la comunicazione
• CorrelationId:
  • Gestione del Tracking;
  • Discard, analisi e valutazione degli errori a livello di singolo
    messaggio;
  • Idempotenza;




• È impostabile o «auto-generato»;
«low level» information flow /1
• Un Model per rappresentarli:
  • Creazione di un modello server-side per la gestione dell’informazione;
• un Adapter per trasformarli:
  • Realizzazione di un grafo di adapter per la trasformazione del dato in
    qualcosa di adatto al trasporto (aka serializzabile)
• un DTO per spedirli:
  • Definizione di un grafo di Data Transfer Object adatto a viaggiare «on the
    wire»;
• un Client Model per gestirli:
  • Un modello client side che «copia» il modello server side finalizzato a
    riprodurre e garantire la stessa «development experience»;
• un ViewModel per mostrarli:
  • Esposizione del modello client alle View attraverso un set di ViewModel in
    perfetto stile Model-View-ViewModel;
«low level» information flow /2

  NH

       Server-Model     Adapter(s)       DTO    Adapter(s)



• Flusso bi-direzionale identico;              Client-Model
• Il Client-Model e il Server-Model:
   • Garantiscono consistenza;
   • Potrebbero essere shared;
                                               ViewModel
• I processo di adapting conosce                    +
 intimamente il modello:                          View

  • EmitMapper (server-side) rulez :-)
Compose your module(s)
• La necessità di rendere l’applicazione estendibile ci porta
 verso:
  • Partizionamento dell’applicazione in «moduli»;
  • «on demand loading» al fine di minimizzare il traffico fino all’effetiva
   richiesta della funzionalità;


• «ModuleLoader»:
   • Discovery;
   • Modules on demand loading;
• «EventDrivenModuleManager»:
   • Module async download service for PRISM v3;
Intermezzo: il solito guastafeste…
• Abbiamo dei moduli scaricati on-demand;
• I tipi disponibili cambiano a runtime:
   • Non possiamo usare svcutil.exe;
   • Dobbiamo avere per forza i tipi shared tra client e server;
• Ma alcuni tipi shared arrivano dopo…
  • Anche client-side possiamo usare il concetto di
    ServiceKnownType(s);
  • Ma simpatia Wcf li «cacha» e se ne frega se cambiano;
  • Client EndPoint «Hack» per invalidare la «cache»:
     • ClientConfiguration «depends» on IClientProxyFactory;
Client Type Sharing «gems»
• Abbiamo lato server il Framework 4.0 e lato client Silverlight
  4.0
• «duplichiamo» i progetti:




• E…:
  • «Linkiamo» i file tra i progetti;
  • Definiamo gli stessi namspace di base;
  • Definiamo lo stesso nome dell’assembly:
     • okkio alle TeamBuild… Gian Maria vi picchia;
  • Usiamo le post build action per portare quello che ci serve dove ci serve;
Compose your View(s)
• La modularizzazione server-side porta in maniera naturale alla
 modularizzazione client-side:
  • I «moduli» rappresentano parti del un servizio;
  • Parti di un servizio sono consumate da un modulo non noto
   upfront;
• In fase di design/protipizzazione è importante definire tutti
  insieme la struttura delle region, il loro ruolo e il loro
  comportamento (RegionAdapters);
• E’ evidente che applicare in un contesto del genere Model-
  View-ViewModel in maniera quasi religiosa rende
  estremamente semplice rimpiazzare la rappresentazione
  visuale;
• Ma…
Client side brokering…
• I ViewModel hanno bisogno di parlare tra loro…




• …ma non si conoscono, condividono solo lo stesso
 «postino» e conoscono il tipo di messaggio;
DEMO…MEGA DEMO :-)
Tailspin Toys
CONCLUDENDO
Che sudata…
ma siete pazzi…Perché tutto ciò?
• La stessa cosa si può fare con un set di servizi ad hoc?
   • Certo che si…


• Quindi siete definitivamente pazzi…
  • Framework riutilizzabile che abbatte la complessità di approccio ad
    un modello basato su servizi;
  • Elevatissima flessibilità:
    • Pluggabilità a caldo;
  • Pluggabile/Estendibile:
    • Workflow di messaggi a livello di singola Operazione;
    • Cache (ad es. sul singolo messaggio);
    • Etc.. etc…
  • Non c’è WCF... quindi se cambia l’architettura non cambia il codice;
«Forse» un po’ si…




      Scenario: Video conference con Alessio e Marco
GO… Q&A
Do not shoot the pianist(s) ;-)

More Related Content

Viewers also liked

Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3Manuel Scapolan
 
Tesi Laurea Specialistica Ingegneria Informatica. Alessandro Andreosè
Tesi Laurea Specialistica Ingegneria Informatica. Alessandro AndreosèTesi Laurea Specialistica Ingegneria Informatica. Alessandro Andreosè
Tesi Laurea Specialistica Ingegneria Informatica. Alessandro Andreosèguesta10af3
 
Windows 10 app design
Windows 10 app designWindows 10 app design
Windows 10 app designLuca Di Fino
 
Dai delegati a LINQ con C#
Dai delegati a LINQ con C#Dai delegati a LINQ con C#
Dai delegati a LINQ con C#Manuel Scapolan
 
Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)Manuel Scapolan
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRSManuel Scapolan
 
Usare le nuove WCF Web Api per creare servizi RESTful
Usare le nuove WCF Web Api per creare servizi RESTfulUsare le nuove WCF Web Api per creare servizi RESTful
Usare le nuove WCF Web Api per creare servizi RESTfulLuca Milan
 
Model-View-ViewModel
Model-View-ViewModelModel-View-ViewModel
Model-View-ViewModelDotNetMarche
 
ARCHITETTURA DI UN'APPLICAZIONE SCALABILE
ARCHITETTURA DI UN'APPLICAZIONE SCALABILEARCHITETTURA DI UN'APPLICAZIONE SCALABILE
ARCHITETTURA DI UN'APPLICAZIONE SCALABILEDotNetCampus
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaMauro Servienti
 
Scrum? E' come fare il bucato!
Scrum? E' come fare il bucato!Scrum? E' come fare il bucato!
Scrum? E' come fare il bucato!Manuel Scapolan
 
AntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatoreAntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatoreManuel Scapolan
 

Viewers also liked (20)

C# 3.0 e LINQ
C# 3.0 e LINQC# 3.0 e LINQ
C# 3.0 e LINQ
 
Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3
 
Linq ed oltre
Linq ed oltreLinq ed oltre
Linq ed oltre
 
Tesi Laurea Specialistica Ingegneria Informatica. Alessandro Andreosè
Tesi Laurea Specialistica Ingegneria Informatica. Alessandro AndreosèTesi Laurea Specialistica Ingegneria Informatica. Alessandro Andreosè
Tesi Laurea Specialistica Ingegneria Informatica. Alessandro Andreosè
 
Windows 10 app design
Windows 10 app designWindows 10 app design
Windows 10 app design
 
Dai delegati a LINQ con C#
Dai delegati a LINQ con C#Dai delegati a LINQ con C#
Dai delegati a LINQ con C#
 
Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)
 
Knockout.js
Knockout.jsKnockout.js
Knockout.js
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
 
Usare le nuove WCF Web Api per creare servizi RESTful
Usare le nuove WCF Web Api per creare servizi RESTfulUsare le nuove WCF Web Api per creare servizi RESTful
Usare le nuove WCF Web Api per creare servizi RESTful
 
Model-View-ViewModel
Model-View-ViewModelModel-View-ViewModel
Model-View-ViewModel
 
WPF
WPFWPF
WPF
 
ARCHITETTURA DI UN'APPLICAZIONE SCALABILE
ARCHITETTURA DI UN'APPLICAZIONE SCALABILEARCHITETTURA DI UN'APPLICAZIONE SCALABILE
ARCHITETTURA DI UN'APPLICAZIONE SCALABILE
 
WPF basics
WPF basicsWPF basics
WPF basics
 
NOSQL
NOSQLNOSQL
NOSQL
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteria
 
Scrum? E' come fare il bucato!
Scrum? E' come fare il bucato!Scrum? E' come fare il bucato!
Scrum? E' come fare il bucato!
 
AntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatoreAntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatore
 
WPF MVVM Toolkit
WPF MVVM ToolkitWPF MVVM Toolkit
WPF MVVM Toolkit
 
OOP with C#
OOP with C#OOP with C#
OOP with C#
 

Similar to Brokering over WCF @ dotNetMarche

Fe04 angular js-101
Fe04   angular js-101Fe04   angular js-101
Fe04 angular js-101DotNetCampus
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Codemotion
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDDotNetCampus
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campusDotNetCampus
 
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...DotNetMarche
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloudRiccardo Zamana
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applicationsDotNetCampus
 
Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008Mauro Servienti
 
UI composition @ dotNetMarche
UI composition @ dotNetMarcheUI composition @ dotNetMarche
UI composition @ dotNetMarcheMauro Servienti
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Whymca
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDLuca Masini
 
ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)Giorgio Di Nardo
 
Lezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationLezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationAndrea Della Corte
 

Similar to Brokering over WCF @ dotNetMarche (20)

m-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Netm-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Net
 
m-v-vm @ dotNetMarche
m-v-vm @ dotNetMarchem-v-vm @ dotNetMarche
m-v-vm @ dotNetMarche
 
UI Composition
UI CompositionUI Composition
UI Composition
 
Fe04 angular js-101
Fe04   angular js-101Fe04   angular js-101
Fe04 angular js-101
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
 
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloud
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applications
 
Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008
 
UI composition @ dotNetMarche
UI composition @ dotNetMarcheUI composition @ dotNetMarche
UI composition @ dotNetMarche
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROID
 
ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)
 
Presentazione Unibo
Presentazione UniboPresentazione Unibo
Presentazione Unibo
 
Lezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationLezione 6: Remote Method Invocation
Lezione 6: Remote Method Invocation
 
OpenDevSecOps 2019 - Open devsecops un caso di studio
OpenDevSecOps 2019 - Open devsecops un caso di studioOpenDevSecOps 2019 - Open devsecops un caso di studio
OpenDevSecOps 2019 - Open devsecops un caso di studio
 
Mokapp - Serveless
Mokapp - ServelessMokapp - Serveless
Mokapp - Serveless
 
Corso 3 giorni Angular 2+
Corso 3 giorni Angular 2+Corso 3 giorni Angular 2+
Corso 3 giorni Angular 2+
 

More from Mauro Servienti

Welcome to the (state) machine @ ExploreDDD 2019
Welcome to the (state) machine @ ExploreDDD 2019Welcome to the (state) machine @ ExploreDDD 2019
Welcome to the (state) machine @ ExploreDDD 2019Mauro Servienti
 
Designing a ui for microservices @ .NET Day Switzerland 2019
Designing a ui for microservices @ .NET Day Switzerland 2019Designing a ui for microservices @ .NET Day Switzerland 2019
Designing a ui for microservices @ .NET Day Switzerland 2019Mauro Servienti
 
Welcome to the (state) machine @ Xe One Day Enterprise Applications
Welcome to the (state) machine @ Xe One Day Enterprise ApplicationsWelcome to the (state) machine @ Xe One Day Enterprise Applications
Welcome to the (state) machine @ Xe One Day Enterprise ApplicationsMauro Servienti
 
All our aggregates are wrong @ NDC Copenhagen 2019
All our aggregates are wrong @ NDC Copenhagen 2019All our aggregates are wrong @ NDC Copenhagen 2019
All our aggregates are wrong @ NDC Copenhagen 2019Mauro Servienti
 
Be like water, my friend @ Agile for Innovation 2019
Be like water, my friend @ Agile for Innovation 2019Be like water, my friend @ Agile for Innovation 2019
Be like water, my friend @ Agile for Innovation 2019Mauro Servienti
 
Microservices architecture is it the right choice to design long-living syste...
Microservices architecture is it the right choice to design long-living syste...Microservices architecture is it the right choice to design long-living syste...
Microservices architecture is it the right choice to design long-living syste...Mauro Servienti
 
Titles, abstracts, and bio matter... oh my! @ Global Diversity CFP Day 2019
Titles, abstracts, and bio matter... oh my! @ Global Diversity CFP Day 2019Titles, abstracts, and bio matter... oh my! @ Global Diversity CFP Day 2019
Titles, abstracts, and bio matter... oh my! @ Global Diversity CFP Day 2019Mauro Servienti
 
Living organizations, particular software @ do IT Better Parma
Living organizations, particular software @ do IT Better ParmaLiving organizations, particular software @ do IT Better Parma
Living organizations, particular software @ do IT Better ParmaMauro Servienti
 
Welcome to the (state) machine @ Crafted Software
Welcome to the (state) machine @ Crafted SoftwareWelcome to the (state) machine @ Crafted Software
Welcome to the (state) machine @ Crafted SoftwareMauro Servienti
 
PO is dead, long live the PO - Italian Agile Day 2018
PO is dead, long live the PO - Italian Agile Day 2018PO is dead, long live the PO - Italian Agile Day 2018
PO is dead, long live the PO - Italian Agile Day 2018Mauro Servienti
 
Design a UI for your Microservices @ Do IT Better
Design a UI for your Microservices @ Do IT BetterDesign a UI for your Microservices @ Do IT Better
Design a UI for your Microservices @ Do IT BetterMauro Servienti
 
Microservices and pineapple on pizza what do they have in common - dos and ...
Microservices and pineapple on pizza   what do they have in common - dos and ...Microservices and pineapple on pizza   what do they have in common - dos and ...
Microservices and pineapple on pizza what do they have in common - dos and ...Mauro Servienti
 
All our aggregates are wrong (ExploreDDD 2018)
All our aggregates are wrong (ExploreDDD 2018)All our aggregates are wrong (ExploreDDD 2018)
All our aggregates are wrong (ExploreDDD 2018)Mauro Servienti
 
Designing a ui for microservices
Designing a ui for microservicesDesigning a ui for microservices
Designing a ui for microservicesMauro Servienti
 
Po is dead, long live the po
Po is dead, long live the poPo is dead, long live the po
Po is dead, long live the poMauro Servienti
 
Shipping code is not the problem, deciding what to ship it is!
Shipping code is not the problem, deciding what to ship it is!Shipping code is not the problem, deciding what to ship it is!
Shipping code is not the problem, deciding what to ship it is!Mauro Servienti
 
GraphQL - Where are you from? Where are you going?
GraphQL - Where are you from? Where are you going?GraphQL - Where are you from? Where are you going?
GraphQL - Where are you from? Where are you going?Mauro Servienti
 
Dall'idea al deploy un lungo viaggio che passa per git flow e semver
Dall'idea al deploy   un lungo viaggio che passa per git flow e semverDall'idea al deploy   un lungo viaggio che passa per git flow e semver
Dall'idea al deploy un lungo viaggio che passa per git flow e semverMauro Servienti
 
Progettare una UI per i Microservices
Progettare una UI per i MicroservicesProgettare una UI per i Microservices
Progettare una UI per i MicroservicesMauro Servienti
 
The road to a Service Oriented Architecture is paved with messages
The road to a Service Oriented Architecture is paved with messagesThe road to a Service Oriented Architecture is paved with messages
The road to a Service Oriented Architecture is paved with messagesMauro Servienti
 

More from Mauro Servienti (20)

Welcome to the (state) machine @ ExploreDDD 2019
Welcome to the (state) machine @ ExploreDDD 2019Welcome to the (state) machine @ ExploreDDD 2019
Welcome to the (state) machine @ ExploreDDD 2019
 
Designing a ui for microservices @ .NET Day Switzerland 2019
Designing a ui for microservices @ .NET Day Switzerland 2019Designing a ui for microservices @ .NET Day Switzerland 2019
Designing a ui for microservices @ .NET Day Switzerland 2019
 
Welcome to the (state) machine @ Xe One Day Enterprise Applications
Welcome to the (state) machine @ Xe One Day Enterprise ApplicationsWelcome to the (state) machine @ Xe One Day Enterprise Applications
Welcome to the (state) machine @ Xe One Day Enterprise Applications
 
All our aggregates are wrong @ NDC Copenhagen 2019
All our aggregates are wrong @ NDC Copenhagen 2019All our aggregates are wrong @ NDC Copenhagen 2019
All our aggregates are wrong @ NDC Copenhagen 2019
 
Be like water, my friend @ Agile for Innovation 2019
Be like water, my friend @ Agile for Innovation 2019Be like water, my friend @ Agile for Innovation 2019
Be like water, my friend @ Agile for Innovation 2019
 
Microservices architecture is it the right choice to design long-living syste...
Microservices architecture is it the right choice to design long-living syste...Microservices architecture is it the right choice to design long-living syste...
Microservices architecture is it the right choice to design long-living syste...
 
Titles, abstracts, and bio matter... oh my! @ Global Diversity CFP Day 2019
Titles, abstracts, and bio matter... oh my! @ Global Diversity CFP Day 2019Titles, abstracts, and bio matter... oh my! @ Global Diversity CFP Day 2019
Titles, abstracts, and bio matter... oh my! @ Global Diversity CFP Day 2019
 
Living organizations, particular software @ do IT Better Parma
Living organizations, particular software @ do IT Better ParmaLiving organizations, particular software @ do IT Better Parma
Living organizations, particular software @ do IT Better Parma
 
Welcome to the (state) machine @ Crafted Software
Welcome to the (state) machine @ Crafted SoftwareWelcome to the (state) machine @ Crafted Software
Welcome to the (state) machine @ Crafted Software
 
PO is dead, long live the PO - Italian Agile Day 2018
PO is dead, long live the PO - Italian Agile Day 2018PO is dead, long live the PO - Italian Agile Day 2018
PO is dead, long live the PO - Italian Agile Day 2018
 
Design a UI for your Microservices @ Do IT Better
Design a UI for your Microservices @ Do IT BetterDesign a UI for your Microservices @ Do IT Better
Design a UI for your Microservices @ Do IT Better
 
Microservices and pineapple on pizza what do they have in common - dos and ...
Microservices and pineapple on pizza   what do they have in common - dos and ...Microservices and pineapple on pizza   what do they have in common - dos and ...
Microservices and pineapple on pizza what do they have in common - dos and ...
 
All our aggregates are wrong (ExploreDDD 2018)
All our aggregates are wrong (ExploreDDD 2018)All our aggregates are wrong (ExploreDDD 2018)
All our aggregates are wrong (ExploreDDD 2018)
 
Designing a ui for microservices
Designing a ui for microservicesDesigning a ui for microservices
Designing a ui for microservices
 
Po is dead, long live the po
Po is dead, long live the poPo is dead, long live the po
Po is dead, long live the po
 
Shipping code is not the problem, deciding what to ship it is!
Shipping code is not the problem, deciding what to ship it is!Shipping code is not the problem, deciding what to ship it is!
Shipping code is not the problem, deciding what to ship it is!
 
GraphQL - Where are you from? Where are you going?
GraphQL - Where are you from? Where are you going?GraphQL - Where are you from? Where are you going?
GraphQL - Where are you from? Where are you going?
 
Dall'idea al deploy un lungo viaggio che passa per git flow e semver
Dall'idea al deploy   un lungo viaggio che passa per git flow e semverDall'idea al deploy   un lungo viaggio che passa per git flow e semver
Dall'idea al deploy un lungo viaggio che passa per git flow e semver
 
Progettare una UI per i Microservices
Progettare una UI per i MicroservicesProgettare una UI per i Microservices
Progettare una UI per i Microservices
 
The road to a Service Oriented Architecture is paved with messages
The road to a Service Oriented Architecture is paved with messagesThe road to a Service Oriented Architecture is paved with messages
The road to a Service Oriented Architecture is paved with messages
 

Brokering over WCF @ dotNetMarche

  • 1. BROKERING... Silverlight & Wcf using a «more» SOA point-of-view Mauro Servienti Giorgio Formica Senior Software Architect @ Gaia Senior Developer @ Gaia mauro.servienti@gaia.is.it giorgio.formica@gaia.is.it Microsoft MVP – Visual C# / MCTS http://milestone.topics.it http://io.non.ho.un.blog....
  • 2. The Agenda • The big picture: • Requisiti; • Information flow; • Architecture; • Technical overview: • Requirements; • Problems; • Solutions; • Composition: • UI Composition; • Module Composition; • Touchin’ the surface of M-V-VM;
  • 3. THE BIG PICTURE Where do we want to go?
  • 4. Distribuzione geografica • Necessità di supportare un ambiente geograficamente distribuito; • Possibilità di supportare scalabilità orizzontale; • Possibilità di supportare idempotenza; • Possibilità di supportare versioning di client e server non sincroni;
  • 5. Atomicità • Necessità di poter decidere il «livello di atomicità» della comunicazione in fase di inizio della stessa; • Possibilità di parallelizzare un set di chiamate; • Possibilità di serializzare un set di chiamate; • Conseguente possibilità di gestire la transazionalità di un set di chiamate;
  • 6. Logica di business • Necessità di introdurre nuovi scenari di comunicazione post deploy senza dover apportare modifiche strutturali al backend dei servizi; • Possibilità di cambiare la logica di gestione server-side a caldo; • Possibilità di cambiare il livello di «composition» server-side; • Possibilità di gestire dei workflow server-side;
  • 7. The big picture Somewhere Client in time... Service • Sappiamo molto poco: mondi separati dove la connettività non è cosa certa;
  • 8. «high level» information flow Client Somewhere Operation in time... Service Request(s) Operation • Un’operazione è atomica: certo…è una :-) Handler • Un’operazione può portare con se più richieste e più risposte: è una e «trina» ;-) Request • Il servizio non conosce gli handler; Handler(s) • Gli handler non conoscono il servizio; • Gli handler (msg) possono conoscersi: workflow;
  • 9. IF YOU WANT BLOOD... ...you’ve got it! :-)
  • 10. Technical problems • Siamo abituati ad una comunicazione con i servizi «strongly typed at method level»; • Il proxy è generato da Visual Studio; • Svcutil.exe genera dei proxy/dto per ogni tipo ma vedremo che a noi non va sempre bene...; • In realtà Wcf non sa nulla di «metodi» e «classi» ragiona solo in termini di messaggi e azioni (e non solo...); • Ma il messaggio di Wcf è troppo «raw» per i nostri gusti; • Abbiamo quindi la necessità di essere strongly-typed ma anche generici… che simpatico…;
  • 17. Recap • Ad alto livello è tutto molto semplice: • «banale» servizio Wcf, senza codice; • Messaggi; • Handlers; • Se è tutto staticamente noto a compile time possiamo anche usare svcutil.exe; • La chiamata è una normale chiamata a Wcf; • Un «blobbone» di reference giusto per semplificare il deploy;
  • 18. Tutto facilissimo, non trovate? • L’infrastruttura (Caronte) vi offre: • Il trasporto: lo stige; • la forma delle cose da trasportare: le anime; • A vostro carico c’è: • La gestione delle anime ;-) • Il client…ovviamente :-)
  • 19. Si…certo certo…bravo bravo…ma? • Tutto ha un inizio… • E una fine :-)
  • 20. Oh my God… <cit.> • Perchè tutto ciò? • Abbiamo bisogno di Inversion of Control @ Service Instance Level; • e… ServiceLocator è il male :-) • A questo punto è tutto facile:
  • 21. Non proprio tutto facilissimo… • Ma… gli attributi di Wcf per il DataContractSerializer? • «ServiceKnownType» & «ServiceKnownTypesProvider»
  • 22. Configuration & Discovery Why no auto-discovery? • Client docet :-) • Troppi vincoli sul deploy;
  • 23. Under the Hood with «Windsor»
  • 26. Client Agenda :-) • I’m the client and this is my language: • Client comunication approach; • Adapt yourself: • Server model – dto – client model; • Compose your world :-) • UI Composition; • Module Composition; • A lap around Model-View-ViewModel: • Client side brokering;
  • 27. Il client e la comunicazione • Operations & Messages; • Errori a livello di «Operation»; • Errori a livello di singolo «Message»
  • 28. Il client e la comunicazione • CorrelationId: • Gestione del Tracking; • Discard, analisi e valutazione degli errori a livello di singolo messaggio; • Idempotenza; • È impostabile o «auto-generato»;
  • 29. «low level» information flow /1 • Un Model per rappresentarli: • Creazione di un modello server-side per la gestione dell’informazione; • un Adapter per trasformarli: • Realizzazione di un grafo di adapter per la trasformazione del dato in qualcosa di adatto al trasporto (aka serializzabile) • un DTO per spedirli: • Definizione di un grafo di Data Transfer Object adatto a viaggiare «on the wire»; • un Client Model per gestirli: • Un modello client side che «copia» il modello server side finalizzato a riprodurre e garantire la stessa «development experience»; • un ViewModel per mostrarli: • Esposizione del modello client alle View attraverso un set di ViewModel in perfetto stile Model-View-ViewModel;
  • 30. «low level» information flow /2 NH Server-Model Adapter(s) DTO Adapter(s) • Flusso bi-direzionale identico; Client-Model • Il Client-Model e il Server-Model: • Garantiscono consistenza; • Potrebbero essere shared; ViewModel • I processo di adapting conosce + intimamente il modello: View • EmitMapper (server-side) rulez :-)
  • 31. Compose your module(s) • La necessità di rendere l’applicazione estendibile ci porta verso: • Partizionamento dell’applicazione in «moduli»; • «on demand loading» al fine di minimizzare il traffico fino all’effetiva richiesta della funzionalità; • «ModuleLoader»: • Discovery; • Modules on demand loading; • «EventDrivenModuleManager»: • Module async download service for PRISM v3;
  • 32. Intermezzo: il solito guastafeste… • Abbiamo dei moduli scaricati on-demand; • I tipi disponibili cambiano a runtime: • Non possiamo usare svcutil.exe; • Dobbiamo avere per forza i tipi shared tra client e server; • Ma alcuni tipi shared arrivano dopo… • Anche client-side possiamo usare il concetto di ServiceKnownType(s); • Ma simpatia Wcf li «cacha» e se ne frega se cambiano; • Client EndPoint «Hack» per invalidare la «cache»: • ClientConfiguration «depends» on IClientProxyFactory;
  • 33. Client Type Sharing «gems» • Abbiamo lato server il Framework 4.0 e lato client Silverlight 4.0 • «duplichiamo» i progetti: • E…: • «Linkiamo» i file tra i progetti; • Definiamo gli stessi namspace di base; • Definiamo lo stesso nome dell’assembly: • okkio alle TeamBuild… Gian Maria vi picchia; • Usiamo le post build action per portare quello che ci serve dove ci serve;
  • 34. Compose your View(s) • La modularizzazione server-side porta in maniera naturale alla modularizzazione client-side: • I «moduli» rappresentano parti del un servizio; • Parti di un servizio sono consumate da un modulo non noto upfront; • In fase di design/protipizzazione è importante definire tutti insieme la struttura delle region, il loro ruolo e il loro comportamento (RegionAdapters); • E’ evidente che applicare in un contesto del genere Model- View-ViewModel in maniera quasi religiosa rende estremamente semplice rimpiazzare la rappresentazione visuale; • Ma…
  • 35. Client side brokering… • I ViewModel hanno bisogno di parlare tra loro… • …ma non si conoscono, condividono solo lo stesso «postino» e conoscono il tipo di messaggio;
  • 38. ma siete pazzi…Perché tutto ciò? • La stessa cosa si può fare con un set di servizi ad hoc? • Certo che si… • Quindi siete definitivamente pazzi… • Framework riutilizzabile che abbatte la complessità di approccio ad un modello basato su servizi; • Elevatissima flessibilità: • Pluggabilità a caldo; • Pluggabile/Estendibile: • Workflow di messaggi a livello di singola Operazione; • Cache (ad es. sul singolo messaggio); • Etc.. etc… • Non c’è WCF... quindi se cambia l’architettura non cambia il codice;
  • 39. «Forse» un po’ si… Scenario: Video conference con Alessio e Marco
  • 40. GO… Q&A Do not shoot the pianist(s) ;-)