SlideShare una empresa de Scribd logo
1 de 35
Dal requisito all'implementazione

       6 scenari «real world» e 6
         soluzioni architetturali
Who we are
Gian Maria Ricci                       Mauro Servienti
Libero professionista @ me             Senior Software Architect @ Gaia
Microsoft MVP Visual Studio ALM        Microsoft MVP Visual C# / MCTS

@: alkampfer@nablasoft.com             @: mauro.servienti@gaia.is.it
Blog: http://www.codewrecks.com        Blog: http://milestone.topics.it
Blog: http://blogs.ugidotnet.org/rgm
Gli Scenari
•   Interazione Uomo - Macchina;
•   Messaging over WCF;
•   Creazione dinamica di Proxy WCF;
•   Introducing I.o.C. in Web Forms;
•   Audit dei dati;
•   Query Specification vs Repository;
Welcome to the machine…

INTERAZIONE UOMO -
MACCHINA
Scenario
• Il nostro software deve gestire gli
  input/output di un macchinario;

• Tutte le logiche applicative sono fatte nel
  software, il macchinario ha solo
  bottoni, leve e segnalatori luminosi;
Requirements
• Il software dialoga con un macchinario su
  cui opera un utente;
• Il Product Owner vuole come requisito la
  possibilità di nominare uno o più «Domain
  Expert» che dovranno testare le logiche
  che guidano la macchina;
• Il product owner vorrebbe automatizzare
  alcuni dei test che verificano le nostre
  logiche;
Solution
• La soluzione migliore è quella di
  disaccoppiare l’accesso all’hardware
  tramite logica «plugin»;
• In questo modo le logiche applicative
  dipendono da una IMachine la quale
  comunica con un IHardwareController;
• In questo modo è possibile realizzare una
  interfaccia che simula la macchina e quindi
  usare MTM e Coded UI Test;
Schema di funzionamento
Interazione Uomo - Macchina

DEMO
The Postman always rings twice…

MESSAGING OVER WCF
Scenario
• Migrazione di un’applicazione a plug-in
  Windows Forms esistente;

• Applicazione LOB Silverlight e back-end
  basato su servizi WCF;
Requirements
• Supporto per un sistema a plug-in:
  – server side e client side;
  – Serializzazione e/o Parallelizzazione;


• Supporto per installazioni in configurazioni
  diverse;

• Supporto per versioning «non sincrono»;
Solution
• Sfruttare la vera natura di WCF: i
  messaggi;
• Il server espone solo due metodi:
  – void Broadcast( OneWayOperation );
  – Response Dispatch( TwoWayOperation );
• Client-side e Server-side «iniettiamo»
  «Messagge(s)» e «MessageHandler(s)»;
Messaging over WCF

DEMO
Sfruttiamo Castle.Windsor per aumentare la flessibilità di
comunicazione

CREAZIONE DINAMICA DI
PROXY WCF
Scenario
• Applicativo WCF/Winform/Desktop che
  viene utilizzato internamente da una ditta
  con accesso al database locale;
• Lo stesso software può essere dato in uso
  a clienti esterni che non hanno
  chiaramente accesso diretto al database;
• Non si vuole mettere i clienti esterni in
  vpn;
Requirements
• Si vuole che il software sia deployabile in
  due configurazioni;
• La prima interna in cui l’accesso viene
  fatto direttamente al database in rete
  locale;
• La seconda per i clienti esterni che
  accederanno tramite un servizio WCF;
Solution
• Il ViewModel Dipenderà da vari servizi
  come IMusicStore service;
• Nella configurazione interna si risolve con
  castle una classe MusicStore che accede
  al db internamente;
• Nella versione esterna realizziamo una
  facility di Castle.Windsor che crea «on the
  fly» il proxy ai servizi wcf;
• Basta cambiare il config ed è fatta 
Schema di funzionamento
Creazione dinamica di Proxy WCF

DEMO
Nightmare before Christmas :-P

INTRODUCING I.O.C. IN WEB
FORMS
Scenario
• Applicazione web legacy, molto
  legacy, basata su Web Form;

• CMS basato su «componenti» (aka ascx);

• Svariate decine di installazioni con
  supporto per l’auto-update;
Requirements
• Necessità di aggiornare la metodologia di
  sviluppo dei nuovi componenti
  introducendo, tra le tante, IoC;

• Necessità di mantenere la retro-
  compatibilità con tutte le installazioni
  esistenti;
Solution
• Al fine di avere IoC dobbiamo inizializzare
  il container allo startup, quindi niente
  HttpModule ma modifica al global.asax;
• «ISupportInitialize» al fine di ridurre a zero
  le breaking change:
  – Nessuna nuova dipendenza;
  – Eccezioni soffocate e «semplicemente»
    loggate;
• Le nuove «Web Form» diventano dei meri
  «passacarte» tra la view e i servizi;
Introducing I.o.C. in Web Forms

DEMO
Fidarsi degli utenti è bene, ma non fidarsi è sicuramente meglio 

AUDIT DEI DATI
Requirements
• Alcune Entità/Tabelle, ma non
  tutte, potrebbero in futuro dovere essere
  auditabili;

• Per «auditabile» si intende la possibilità di
  determinare chi e quando ha creato la
  riga/istanza e chi e quando ha apportato
  l’ultima modifica;
Soluzione
• Adottare un ORM permette di intercettare
  ogni «save» e «update» delle entità;
• In questo modo l’operazione di audit può
  essere centralizzata e resa trasparente allo
  sviluppatore;
• Per rendere una entità auditabile è
  sufficiente aggiungere le proprietà e la
  corrispettiva interfaccia;
Audit dei dati

DEMO
Un requisito un po’ diverso dal solito…

QUERY SPECIFICATION VS
REPOSITORY OVER WCF
Scenario
• Servizio WCF per la gestione di un
  «albero»:
  – Rami;
  – Foglie;
  – Attributi (sia su rami che su foglie);
Requirements
• I dati gestiti dall’albero devono essere
  localizzabili;

• Esporre un motore di «query» over WCF;

• Introdurre nel team un dev junior:
  – completamente a digiuno di WCF…;
  – …e anche di tutto il resto :-P
«Tentative»
• il «repository» è stato fallimentare:
  – Per il dev junior troppo difficile da
    maneggiare;
  – Inutilmente complesso cercare di gestire il
    concetto di «query componibile»;
  – Proliferare di metodi  intellisense pollution;
  – Necessità di necessità di condividere tra
    repository diversi la stessa UoW;
Solution
• «Query Specification»
  – Classe che astrae il concetto di query;
  – Classe che si occupa di eseguire la query a
    fronte di un provider;
  – UoW condivisa in base al caso d’uso;
• «Query Criteria» over WCF:
  – Cosa ci vieta di rappresentare con dei DTO il
    concetto di «criterio» e renderlo componibile?
Query Specification vs Repository over WCF

DEMO

Más contenido relacionado

La actualidad más candente

Dot netcampus2015 green-template
Dot netcampus2015 green-templateDot netcampus2015 green-template
Dot netcampus2015 green-templateDotNetCampus
 
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiAndrea Dottor
 
What’s my destiny vSphere 6 @ VMUG.IT 20150304
What’s my destiny vSphere 6 @ VMUG.IT 20150304What’s my destiny vSphere 6 @ VMUG.IT 20150304
What’s my destiny vSphere 6 @ VMUG.IT 20150304VMUG IT
 
What's new in Asp.Net 4.5 (and WebApi)
What's new in Asp.Net 4.5 (and WebApi)What's new in Asp.Net 4.5 (and WebApi)
What's new in Asp.Net 4.5 (and WebApi)Luca Milan
 
Unofficial Xamarin Day DomusDotNet
Unofficial Xamarin Day DomusDotNetUnofficial Xamarin Day DomusDotNet
Unofficial Xamarin Day DomusDotNetGaetano Paternò
 
Evoluzione del web development dalle cgi ai microservices
Evoluzione del web development dalle cgi ai microservicesEvoluzione del web development dalle cgi ai microservices
Evoluzione del web development dalle cgi ai microservicesDaniele Mondello
 
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Andrea Dottor
 
Generazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NETGenerazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NETStefano Ottaviani
 
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
 
Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Andrea Dottor
 
Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte
 
Blazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web FormBlazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web FormAndrea Dottor
 
Alessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.NetAlessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.NetAlessandro Forte
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiAndrea Dottor
 
Evento Veeam & Assyrus - 2 Novità di Veeam Backup & Replication v9
Evento Veeam & Assyrus - 2 Novità di Veeam Backup & Replication v9Evento Veeam & Assyrus - 2 Novità di Veeam Backup & Replication v9
Evento Veeam & Assyrus - 2 Novità di Veeam Backup & Replication v9Andrea Mauro
 
Branching & Merging strategies (with TFS)
Branching & Merging strategies (with TFS)Branching & Merging strategies (with TFS)
Branching & Merging strategies (with TFS)Klab
 
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMRealizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMCodemotion
 
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Andrea Agnoletto
 

La actualidad más candente (20)

Dot netcampus2015 green-template
Dot netcampus2015 green-templateDot netcampus2015 green-template
Dot netcampus2015 green-template
 
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi reali
 
What’s my destiny vSphere 6 @ VMUG.IT 20150304
What’s my destiny vSphere 6 @ VMUG.IT 20150304What’s my destiny vSphere 6 @ VMUG.IT 20150304
What’s my destiny vSphere 6 @ VMUG.IT 20150304
 
What's new in Asp.Net 4.5 (and WebApi)
What's new in Asp.Net 4.5 (and WebApi)What's new in Asp.Net 4.5 (and WebApi)
What's new in Asp.Net 4.5 (and WebApi)
 
Unofficial Xamarin Day DomusDotNet
Unofficial Xamarin Day DomusDotNetUnofficial Xamarin Day DomusDotNet
Unofficial Xamarin Day DomusDotNet
 
Evoluzione del web development dalle cgi ai microservices
Evoluzione del web development dalle cgi ai microservicesEvoluzione del web development dalle cgi ai microservices
Evoluzione del web development dalle cgi ai microservices
 
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
 
Generazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NETGenerazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NET
 
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
 
Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0
 
Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0
 
Blazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web FormBlazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web Form
 
Alessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.NetAlessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.Net
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivati
 
Evento Veeam & Assyrus - 2 Novità di Veeam Backup & Replication v9
Evento Veeam & Assyrus - 2 Novità di Veeam Backup & Replication v9Evento Veeam & Assyrus - 2 Novità di Veeam Backup & Replication v9
Evento Veeam & Assyrus - 2 Novità di Veeam Backup & Replication v9
 
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
 
MVC and Struts 1
MVC and Struts 1MVC and Struts 1
MVC and Struts 1
 
Branching & Merging strategies (with TFS)
Branching & Merging strategies (with TFS)Branching & Merging strategies (with TFS)
Branching & Merging strategies (with TFS)
 
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMRealizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
 
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?
 

Similar a Dal requisito all'implementazione @ CD2010

Brokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarcheBrokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarcheMauro Servienti
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaMauro Servienti
 
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
 
Antica presentazione AJAX
Antica presentazione AJAXAntica presentazione AJAX
Antica presentazione AJAXTommaso Torti
 
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
 
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
 
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
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsGiorgio Di Nardo
 
OCP-Architettura e caratteristiche della PaaS
OCP-Architettura e caratteristiche della PaaSOCP-Architettura e caratteristiche della PaaS
OCP-Architettura e caratteristiche della PaaSopencityplatform
 
Novità di VMware vShere 6.0 @ VMUG.IT 20150304
Novità di VMware vShere 6.0 @ VMUG.IT 20150304Novità di VMware vShere 6.0 @ VMUG.IT 20150304
Novità di VMware vShere 6.0 @ VMUG.IT 20150304VMUG IT
 
Software Engineering Introduction in Italian
Software Engineering Introduction in ItalianSoftware Engineering Introduction in Italian
Software Engineering Introduction in ItalianPierpaoloCaricato
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDaniele Mondello
 
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
 
Fe04 angular js-101
Fe04   angular js-101Fe04   angular js-101
Fe04 angular js-101DotNetCampus
 
Model View Controller - Semplificare Il Codice E Minimizzare I Tempi
Model View Controller - Semplificare Il Codice E Minimizzare I TempiModel View Controller - Semplificare Il Codice E Minimizzare I Tempi
Model View Controller - Semplificare Il Codice E Minimizzare I TempiMarco Parenzan
 

Similar a Dal requisito all'implementazione @ CD2010 (20)

Brokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarcheBrokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarche
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteria
 
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)
 
Antica presentazione AJAX
Antica presentazione AJAXAntica presentazione AJAX
Antica presentazione AJAX
 
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
 
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
 
UI Composition
UI CompositionUI Composition
UI Composition
 
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
 
m-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Netm-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Net
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.js
 
Introduzione A Docker
Introduzione A DockerIntroduzione A Docker
Introduzione A Docker
 
OCP-Architettura e caratteristiche della PaaS
OCP-Architettura e caratteristiche della PaaSOCP-Architettura e caratteristiche della PaaS
OCP-Architettura e caratteristiche della PaaS
 
Novità di VMware vShere 6.0 @ VMUG.IT 20150304
Novità di VMware vShere 6.0 @ VMUG.IT 20150304Novità di VMware vShere 6.0 @ VMUG.IT 20150304
Novità di VMware vShere 6.0 @ VMUG.IT 20150304
 
Software Engineering Introduction in Italian
Software Engineering Introduction in ItalianSoftware Engineering Introduction in Italian
Software Engineering Introduction in Italian
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele Mondello
 
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...
 
Fe04 angular js-101
Fe04   angular js-101Fe04   angular js-101
Fe04 angular js-101
 
OCP Paas_ultima
OCP Paas_ultimaOCP Paas_ultima
OCP Paas_ultima
 
Model View Controller - Semplificare Il Codice E Minimizzare I Tempi
Model View Controller - Semplificare Il Codice E Minimizzare I TempiModel View Controller - Semplificare Il Codice E Minimizzare I Tempi
Model View Controller - Semplificare Il Codice E Minimizzare I Tempi
 

Más de 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
 

Más de 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
 

Dal requisito all'implementazione @ CD2010

  • 1. Dal requisito all'implementazione 6 scenari «real world» e 6 soluzioni architetturali
  • 2. Who we are Gian Maria Ricci Mauro Servienti Libero professionista @ me Senior Software Architect @ Gaia Microsoft MVP Visual Studio ALM Microsoft MVP Visual C# / MCTS @: alkampfer@nablasoft.com @: mauro.servienti@gaia.is.it Blog: http://www.codewrecks.com Blog: http://milestone.topics.it Blog: http://blogs.ugidotnet.org/rgm
  • 3. Gli Scenari • Interazione Uomo - Macchina; • Messaging over WCF; • Creazione dinamica di Proxy WCF; • Introducing I.o.C. in Web Forms; • Audit dei dati; • Query Specification vs Repository;
  • 4. Welcome to the machine… INTERAZIONE UOMO - MACCHINA
  • 5. Scenario • Il nostro software deve gestire gli input/output di un macchinario; • Tutte le logiche applicative sono fatte nel software, il macchinario ha solo bottoni, leve e segnalatori luminosi;
  • 6. Requirements • Il software dialoga con un macchinario su cui opera un utente; • Il Product Owner vuole come requisito la possibilità di nominare uno o più «Domain Expert» che dovranno testare le logiche che guidano la macchina; • Il product owner vorrebbe automatizzare alcuni dei test che verificano le nostre logiche;
  • 7. Solution • La soluzione migliore è quella di disaccoppiare l’accesso all’hardware tramite logica «plugin»; • In questo modo le logiche applicative dipendono da una IMachine la quale comunica con un IHardwareController; • In questo modo è possibile realizzare una interfaccia che simula la macchina e quindi usare MTM e Coded UI Test;
  • 9. Interazione Uomo - Macchina DEMO
  • 10. The Postman always rings twice… MESSAGING OVER WCF
  • 11. Scenario • Migrazione di un’applicazione a plug-in Windows Forms esistente; • Applicazione LOB Silverlight e back-end basato su servizi WCF;
  • 12. Requirements • Supporto per un sistema a plug-in: – server side e client side; – Serializzazione e/o Parallelizzazione; • Supporto per installazioni in configurazioni diverse; • Supporto per versioning «non sincrono»;
  • 13. Solution • Sfruttare la vera natura di WCF: i messaggi; • Il server espone solo due metodi: – void Broadcast( OneWayOperation ); – Response Dispatch( TwoWayOperation ); • Client-side e Server-side «iniettiamo» «Messagge(s)» e «MessageHandler(s)»;
  • 15. Sfruttiamo Castle.Windsor per aumentare la flessibilità di comunicazione CREAZIONE DINAMICA DI PROXY WCF
  • 16. Scenario • Applicativo WCF/Winform/Desktop che viene utilizzato internamente da una ditta con accesso al database locale; • Lo stesso software può essere dato in uso a clienti esterni che non hanno chiaramente accesso diretto al database; • Non si vuole mettere i clienti esterni in vpn;
  • 17. Requirements • Si vuole che il software sia deployabile in due configurazioni; • La prima interna in cui l’accesso viene fatto direttamente al database in rete locale; • La seconda per i clienti esterni che accederanno tramite un servizio WCF;
  • 18. Solution • Il ViewModel Dipenderà da vari servizi come IMusicStore service; • Nella configurazione interna si risolve con castle una classe MusicStore che accede al db internamente; • Nella versione esterna realizziamo una facility di Castle.Windsor che crea «on the fly» il proxy ai servizi wcf; • Basta cambiare il config ed è fatta 
  • 20. Creazione dinamica di Proxy WCF DEMO
  • 21. Nightmare before Christmas :-P INTRODUCING I.O.C. IN WEB FORMS
  • 22. Scenario • Applicazione web legacy, molto legacy, basata su Web Form; • CMS basato su «componenti» (aka ascx); • Svariate decine di installazioni con supporto per l’auto-update;
  • 23. Requirements • Necessità di aggiornare la metodologia di sviluppo dei nuovi componenti introducendo, tra le tante, IoC; • Necessità di mantenere la retro- compatibilità con tutte le installazioni esistenti;
  • 24. Solution • Al fine di avere IoC dobbiamo inizializzare il container allo startup, quindi niente HttpModule ma modifica al global.asax; • «ISupportInitialize» al fine di ridurre a zero le breaking change: – Nessuna nuova dipendenza; – Eccezioni soffocate e «semplicemente» loggate; • Le nuove «Web Form» diventano dei meri «passacarte» tra la view e i servizi;
  • 25. Introducing I.o.C. in Web Forms DEMO
  • 26. Fidarsi degli utenti è bene, ma non fidarsi è sicuramente meglio  AUDIT DEI DATI
  • 27. Requirements • Alcune Entità/Tabelle, ma non tutte, potrebbero in futuro dovere essere auditabili; • Per «auditabile» si intende la possibilità di determinare chi e quando ha creato la riga/istanza e chi e quando ha apportato l’ultima modifica;
  • 28. Soluzione • Adottare un ORM permette di intercettare ogni «save» e «update» delle entità; • In questo modo l’operazione di audit può essere centralizzata e resa trasparente allo sviluppatore; • Per rendere una entità auditabile è sufficiente aggiungere le proprietà e la corrispettiva interfaccia;
  • 30. Un requisito un po’ diverso dal solito… QUERY SPECIFICATION VS REPOSITORY OVER WCF
  • 31. Scenario • Servizio WCF per la gestione di un «albero»: – Rami; – Foglie; – Attributi (sia su rami che su foglie);
  • 32. Requirements • I dati gestiti dall’albero devono essere localizzabili; • Esporre un motore di «query» over WCF; • Introdurre nel team un dev junior: – completamente a digiuno di WCF…; – …e anche di tutto il resto :-P
  • 33. «Tentative» • il «repository» è stato fallimentare: – Per il dev junior troppo difficile da maneggiare; – Inutilmente complesso cercare di gestire il concetto di «query componibile»; – Proliferare di metodi  intellisense pollution; – Necessità di necessità di condividere tra repository diversi la stessa UoW;
  • 34. Solution • «Query Specification» – Classe che astrae il concetto di query; – Classe che si occupa di eseguire la query a fronte di un provider; – UoW condivisa in base al caso d’uso; • «Query Criteria» over WCF: – Cosa ci vieta di rappresentare con dei DTO il concetto di «criterio» e renderlo componibile?
  • 35. Query Specification vs Repository over WCF DEMO