SlideShare a Scribd company logo
1 of 37
utile e sostenibile




L'architettura di un'applicazione in un mondo basato
         su servizi: cosa fare e cosa non fare
Mauro Servienti
Microsoft MVP - Visual C#

Qualcuno sostiene che io sia un «architetto»
in realtà ci provo e basta …quindi sempre «mason»
sono…che poi…c’è anche qualcuno che sostiene
che gli architetti non esistono…

//milestone.topics.it
mauro@topics.it




Appassionato di: ALM e metodologie agili


                          Who’s Mauro?
Avviso ai naviganti
• È un mondo «nuovo» anche per il sottoscritto
  – Lo stile della presentazione non la ciccia…in parte
    anche la ciccia :-)

• Tutto quello che dirò a prescindere da come lo
  dirò sono un set di linee guida non la verità
  assoluta, linee guida che devono essere calate nel
  contesto del progetto;
  – Insomma…non sono il dottore :-P

• Attenti al simbolino del «take away»:
•   Verità e Assiomi (…pretenzioso l’amico);
•   Perché mai un servizio?
•   A-to-mi-co;
•   Il bagaglio…per un viaggio;
•   …un viaggio specifico;


                 Agenda…? :-)
• i servizi si usano se servono non perché fa figo;
   – Questa è molto minimal…;
• l’atomicità deve essere garantita sempre, magari non si può
  parlare di transazioni, ma l’atomicità (anche apparente) delle
  operazioni ci deve essere sempre;
   – Il driver è il bisogno del nostro utente;
• ogni volta che attraversate un confine c’è un costo notevole
  valutate bene cosa portate con voi;
   – Lo stige è un viaggio senza ritorno… :-)
• cercare di essere vagamente generici (ad esempio esponendo in
  maniera banale la CRUD) non serve a nulla;
   – Provate a chiedere all’ufficio postale se vi cerca un indirizzo…
Vi ricorda qualcosa?
• Boundaries are Explicit
  – Viaggiando attraversate dei confini…ben noti;
• Service compatibility is determined based on
  policy:
  – Quando chiedete qualcosa a qualcuno sapete cosa
    chiedere oppure sapete cosa chiedere per sapere cosa
    chiedere… :-)
• Services share schema and contract, not class
  – …non mi viene un esempio… :-/
• Services are Autonomous:
  – Se sostituite l’impeigato allo sportello cosa cambia?
•   Verità e Assiomi (…pretenzioso l’amico);
•   Perché mai un servizio?
•   A-to-mi-co;
•   Il bagaglio…per un viaggio;
•   …un viaggio specifico;


                 Agenda…? :-)
Security/policy
il front-end non deve poter accedere alla base dati;
Più di un’applicazione fruisce dei nostri dati;
Dobbiamo poter scalare orizzontalmente
(ed è costoso e/o complesso scalare orizzontalmente un
                      database)
Dobbiamo aggregare fonti dati eterogenee al fine di
renderle fruibili a diverse applicazioni senza spalmare
su ogni applicazione la complessità dell’aggregazione
…e bla bla bla…

sicuramente ci sono una
montagna di buonissimi
       motivi…




                          Motivi e Bisogni
•   Verità e Assiomi (…pretenzioso l’amico);
•   Perché mai un servizio?
•   A-to-mi-co;
•   Il bagaglio…per un viaggio;
•   …un viaggio specifico;


                 Agenda…? :-)
• L’utente ha il suo
  concetto di atomicità;
• Il modello mentale
  dell’utente è sacro;
• Ogni volta che si
  attraversa un confine le
  transazioni sono il male;




      A-to-mi-co…
Nel modello mentale
dell’utente le
transazioni non
esistono;

Non si può appendere
un quadro in
transazione…



  Quindi?!?!?!
the user-mental-model way (1)
• compensazione:
    1. Ciò che non ha effetti collaterali (abbandono);
    2. Ciò che è cancellabile in maniera definitiva;
    3. Ciò che è per forza transazionale (orticello);


•   Preparo tutti i documenti per la pratica edilizia;
•   Avvio la richiesta della pratica edilizia;
•   …non trovo nulla che debba essere «transazionale»;
                                         Take away
the user-mental-model way (2)
• messaggio & fotografia;
  1. Inserisco un’operazione;
  2. Inserisco un’operazione contraria;
  3. Faccio una fotografia, cancello le operazioni fatte
     (se serve) e ricomincio;


• La contabilità funziona così…da sempre;


                                        Take away
…and least but not
                           last…

                  Idempotenza
 Se cercate di ripresentare la stessa pratica
edilizia più volte non è che vi costruiscono più
                     case…

                                    Take away
Le transazioni servono perché abbiamo a che
  fare con un database relazionale la cui struttura
  dei dati ha un’atomicità molto diversa (e spesso
     obbligata) dal modello mentale dell’utente.

      Questo ci porta, da pigri, a giovare delle
       transazioni…anche fuori dall’orticello.




…la cruda realtà…
•   Verità e Assiomi (…pretenzioso l’amico);
•   Perché mai un servizio?
•   A-to-mi-co;
•   Il bagaglio…per un viaggio;
•   …un viaggio specifico;


                 Agenda…? :-)
Credo sia chiaro a tutti che sono sciatori….




è tutto in dipendenza del viaggio…
Quanti viaggi ci sono?
Avrebbe senso lo
stesso bagaglio?
Aggregate…che non vuol dire aggregate

• I confini devono essere netti, altrimenti le
  spezie si mischiano;
• Ci sono delle spezie che sono il risultato di un
  mix…ma sono delle nuove spezie diverse;
• Brutalmente detto significa che avete più
  rappresentazioni dello stesso dato per «use
  case» diversi…ma è veramente lo stesso dato?

                                    Take away
•   Verità e Assiomi (…pretenzioso l’amico);
•   Perché mai un servizio?
•   A-to-mi-co;
•   Il bagaglio…per un viaggio;
•   …un viaggio specifico;


                 Agenda…? :-)
Ho detto sciatori?….scusate intendevo alpinisti.




…un viaggio specifico
Produrreste mai questo?
Allora perché fate questo?
public interface IApplicationService
{
      void Save( DomainEntity entity );
}



Che cosa manca di fondamentale?
It’s all about state
• Cosa, Perché e Come rappresentano
           le intenzioni;
         • Save( Object ) non dichiara nulla delle
           intenzioni, o magari non dichiara
           abbastanza;
         • ChangeCustomerAddress è molto più
           esplicativo;
         • La generalizzazione porta
           inevitabilmente alla perdita di
           controllo;
         • I contratti di un servizio sono il posto
           sbagliato per generalizzare altrimenti
           finite con il chiedere l’indirizzo al
           postino;

criminal intent                    Take away
…a meno che…


Piccolo spazio pubblicità…
       «messaggi»
…è un mondo dificile…




      «duale»
duale: lettura
• la “catena” delle operazioni che
  portano il dato a chi ne ha
  bisogno, nella forma in cui ne ha
  bisogno, deve essere il più corta
  possibile;
• Più la catena è lunga più si tende a
  generalizzare:
   – Limiti: che portano a sacrificare la
     qualità a favore dei costi;
   – Con i servizi i costi sono già alti quindi
     sacrificare è solo controproducente;
   – l’unica cosa che ha molto senso
     inserire nella pipeline di lettura è la      Take away
     security;
duale: scrittura
• La scrittura ha molto senso che segua una
  strada diversa, con servizi diversi;
   – Con tutta la «pipeline» che serve;
• Fondamentale, in scrittura, è cambiare
  punto di vista, non più in termini di “salva
  questo grafo di oggetti” ma in termini di
  “porta il tuo (del servizio) grafo dallo stato
  in cui è a questo nuovo stato”;
   – CQRS e Event Sourcing;
• Snapshop e ChangeSet
   – abbiamo una situazione nota (uno Snapshot)
     e dato un set di modifiche (ChangeSet)
     vogliamo passare ad una nuova situazione
     nota;
                              Take away
2 aggregate…?!?!?
…per una cosa sola…!!!
per l’utente è uno solo
• Costa? moltissimo;
  – Skill;
  – Codice, tanto codice (ma noi
    abbiamo i tool);
• Costa? pochissimo;
  – Sul medio-lungo termine;
  – È molto più manutenibile;
  – È molto più flessibile;

                                Take away
Andiamo a mangiare…




                      Domande?




         Welcome to the DDD World.

More Related Content

Viewers also liked

Introduction to the Particular Platform
Introduction to the Particular PlatformIntroduction to the Particular Platform
Introduction to the Particular PlatformMauro Servienti
 
NServiceBus - building a distributed system based on a messaging infrastructure
NServiceBus - building a distributed system based on a messaging infrastructureNServiceBus - building a distributed system based on a messaging infrastructure
NServiceBus - building a distributed system based on a messaging infrastructureMauro Servienti
 
Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Mauro Servienti
 
Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008Mauro Servienti
 
NServiceBus - introduction to a message based distributed architecture
NServiceBus - introduction to a message based distributed architectureNServiceBus - introduction to a message based distributed architecture
NServiceBus - introduction to a message based distributed architectureMauro Servienti
 
Croce e delizia del lavoro remoto
Croce e delizia del lavoro remotoCroce e delizia del lavoro remoto
Croce e delizia del lavoro remotoMauro Servienti
 
Brokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarcheBrokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarcheMauro Servienti
 
On working in Particular
On working in ParticularOn working in Particular
On working in ParticularMauro Servienti
 
SOA, DDD e microservices
SOA, DDD e microservicesSOA, DDD e microservices
SOA, DDD e microservicesMauro Servienti
 
THE ROAD TO A SERVICE ORIENTED ARCHITECTURE (SOA)
THE ROAD TO A  SERVICE ORIENTED ARCHITECTURE (SOA)THE ROAD TO A  SERVICE ORIENTED ARCHITECTURE (SOA)
THE ROAD TO A SERVICE ORIENTED ARCHITECTURE (SOA)Mauro Servienti
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaMauro Servienti
 
Single Sign On con IdentityServer
Single Sign On con IdentityServerSingle Sign On con IdentityServer
Single Sign On con IdentityServerMauro Servienti
 

Viewers also liked (19)

Introduction to the Particular Platform
Introduction to the Particular PlatformIntroduction to the Particular Platform
Introduction to the Particular Platform
 
System.AddIn @ Xe.Net
System.AddIn @ Xe.NetSystem.AddIn @ Xe.Net
System.AddIn @ Xe.Net
 
NServiceBus - building a distributed system based on a messaging infrastructure
NServiceBus - building a distributed system based on a messaging infrastructureNServiceBus - building a distributed system based on a messaging infrastructure
NServiceBus - building a distributed system based on a messaging infrastructure
 
Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010
 
VS Package @ CD2008
VS Package @ CD2008VS Package @ CD2008
VS Package @ CD2008
 
AngularJS - directives
AngularJS - directivesAngularJS - directives
AngularJS - directives
 
Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008
 
Angular js
Angular jsAngular js
Angular js
 
NServiceBus - introduction to a message based distributed architecture
NServiceBus - introduction to a message based distributed architectureNServiceBus - introduction to a message based distributed architecture
NServiceBus - introduction to a message based distributed architecture
 
Croce e delizia del lavoro remoto
Croce e delizia del lavoro remotoCroce e delizia del lavoro remoto
Croce e delizia del lavoro remoto
 
m-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Netm-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Net
 
Brokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarcheBrokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarche
 
On working in Particular
On working in ParticularOn working in Particular
On working in Particular
 
Pub/Sub Basics
Pub/Sub BasicsPub/Sub Basics
Pub/Sub Basics
 
SOA, DDD e microservices
SOA, DDD e microservicesSOA, DDD e microservices
SOA, DDD e microservices
 
THE ROAD TO A SERVICE ORIENTED ARCHITECTURE (SOA)
THE ROAD TO A  SERVICE ORIENTED ARCHITECTURE (SOA)THE ROAD TO A  SERVICE ORIENTED ARCHITECTURE (SOA)
THE ROAD TO A SERVICE ORIENTED ARCHITECTURE (SOA)
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteria
 
Services UI composition
Services UI compositionServices UI composition
Services UI composition
 
Single Sign On con IdentityServer
Single Sign On con IdentityServerSingle Sign On con IdentityServer
Single Sign On con IdentityServer
 

Similar to Utile e sostenibile

Cloud computing
Cloud computing Cloud computing
Cloud computing Lucio Gamba
 
Test Driven Development @ Xe.Net
Test Driven Development @ Xe.NetTest Driven Development @ Xe.Net
Test Driven Development @ Xe.NetMauro Servienti
 
Software ...e tutto ciò che comporta
Software ...e tutto ciò che comportaSoftware ...e tutto ciò che comporta
Software ...e tutto ciò che comportaAlberto Brandolini
 
Loosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelLoosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelFrancesca1980
 
Agile Experience Design & Development - IAD 2012
Agile Experience Design & Development - IAD 2012Agile Experience Design & Development - IAD 2012
Agile Experience Design & Development - IAD 2012Timothy Carniato
 
Perdere il controllo (con note)
Perdere il controllo (con note)Perdere il controllo (con note)
Perdere il controllo (con note)Cristiano Rastelli
 
"Ecommerce: davvero è il momento migliore?"
"Ecommerce: davvero è il momento migliore?""Ecommerce: davvero è il momento migliore?"
"Ecommerce: davvero è il momento migliore?"Meta Line
 
Costruire un Recommendation Engine con Cosmos DB
Costruire un Recommendation Engine con Cosmos DBCostruire un Recommendation Engine con Cosmos DB
Costruire un Recommendation Engine con Cosmos DBLaura Villa
 
Mini Lectio 2 Mobile Search Marketing Master IULM 2009
Mini Lectio 2 Mobile Search Marketing Master IULM 2009Mini Lectio 2 Mobile Search Marketing Master IULM 2009
Mini Lectio 2 Mobile Search Marketing Master IULM 2009Marco Massara
 
Lo Zen e l'arte dello UX Design Mobile - festival ICT 2015 - Synesthesia
Lo Zen e l'arte dello UX Design Mobile -  festival ICT 2015 - SynesthesiaLo Zen e l'arte dello UX Design Mobile -  festival ICT 2015 - Synesthesia
Lo Zen e l'arte dello UX Design Mobile - festival ICT 2015 - SynesthesiaFrancesco Ronchi
 
User Stories - Andrea Francia @ WeDev 7 novembre 2018
User Stories - Andrea Francia @ WeDev 7 novembre 2018User Stories - Andrea Francia @ WeDev 7 novembre 2018
User Stories - Andrea Francia @ WeDev 7 novembre 2018Andrea Francia
 
Model-View-ViewModel
Model-View-ViewModelModel-View-ViewModel
Model-View-ViewModelDotNetMarche
 
Tecnologie e Tecniche per affrontare il Mondo che Cambia
Tecnologie e Tecniche per affrontare il Mondo che CambiaTecnologie e Tecniche per affrontare il Mondo che Cambia
Tecnologie e Tecniche per affrontare il Mondo che CambiaMarco Parenzan
 
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...Marco Parenzan
 
Non so assolutmente niente di informatica o web ma devo comunque creare un pr...
Non so assolutmente niente di informatica o web ma devo comunque creare un pr...Non so assolutmente niente di informatica o web ma devo comunque creare un pr...
Non so assolutmente niente di informatica o web ma devo comunque creare un pr...Gabriele Guizzardi
 

Similar to Utile e sostenibile (20)

Cloud computing
Cloud computing Cloud computing
Cloud computing
 
Test Driven Development @ Xe.Net
Test Driven Development @ Xe.NetTest Driven Development @ Xe.Net
Test Driven Development @ Xe.Net
 
Software ...e tutto ciò che comporta
Software ...e tutto ciò che comportaSoftware ...e tutto ciò che comporta
Software ...e tutto ciò che comporta
 
Loosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelLoosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain model
 
La qualità non paga
La qualità non pagaLa qualità non paga
La qualità non paga
 
Agile Experience Design & Development - IAD 2012
Agile Experience Design & Development - IAD 2012Agile Experience Design & Development - IAD 2012
Agile Experience Design & Development - IAD 2012
 
Perdere il controllo (con note)
Perdere il controllo (con note)Perdere il controllo (con note)
Perdere il controllo (con note)
 
"Ecommerce: davvero è il momento migliore?"
"Ecommerce: davvero è il momento migliore?""Ecommerce: davvero è il momento migliore?"
"Ecommerce: davvero è il momento migliore?"
 
Costruire un Recommendation Engine con Cosmos DB
Costruire un Recommendation Engine con Cosmos DBCostruire un Recommendation Engine con Cosmos DB
Costruire un Recommendation Engine con Cosmos DB
 
Python <3 Azure
Python <3 AzurePython <3 Azure
Python <3 Azure
 
Mini Lectio 2 Mobile Search Marketing Master IULM 2009
Mini Lectio 2 Mobile Search Marketing Master IULM 2009Mini Lectio 2 Mobile Search Marketing Master IULM 2009
Mini Lectio 2 Mobile Search Marketing Master IULM 2009
 
Lo Zen e l'arte dello UX Design Mobile - festival ICT 2015 - Synesthesia
Lo Zen e l'arte dello UX Design Mobile -  festival ICT 2015 - SynesthesiaLo Zen e l'arte dello UX Design Mobile -  festival ICT 2015 - Synesthesia
Lo Zen e l'arte dello UX Design Mobile - festival ICT 2015 - Synesthesia
 
User Stories - Andrea Francia @ WeDev 7 novembre 2018
User Stories - Andrea Francia @ WeDev 7 novembre 2018User Stories - Andrea Francia @ WeDev 7 novembre 2018
User Stories - Andrea Francia @ WeDev 7 novembre 2018
 
HTML5 for Mobile
HTML5 for MobileHTML5 for Mobile
HTML5 for Mobile
 
Il valore percepito
Il valore percepitoIl valore percepito
Il valore percepito
 
Model-View-ViewModel
Model-View-ViewModelModel-View-ViewModel
Model-View-ViewModel
 
Tecnologie e Tecniche per affrontare il Mondo che Cambia
Tecnologie e Tecniche per affrontare il Mondo che CambiaTecnologie e Tecniche per affrontare il Mondo che Cambia
Tecnologie e Tecniche per affrontare il Mondo che Cambia
 
L'impresa del futuro tra prezzi, marketing e web
L'impresa del futuro tra prezzi, marketing e webL'impresa del futuro tra prezzi, marketing e web
L'impresa del futuro tra prezzi, marketing e web
 
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
 
Non so assolutmente niente di informatica o web ma devo comunque creare un pr...
Non so assolutmente niente di informatica o web ma devo comunque creare un pr...Non so assolutmente niente di informatica o web ma devo comunque creare un pr...
Non so assolutmente niente di informatica o web ma devo comunque creare un pr...
 

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
 

Utile e sostenibile

  • 1. utile e sostenibile L'architettura di un'applicazione in un mondo basato su servizi: cosa fare e cosa non fare
  • 2. Mauro Servienti Microsoft MVP - Visual C# Qualcuno sostiene che io sia un «architetto» in realtà ci provo e basta …quindi sempre «mason» sono…che poi…c’è anche qualcuno che sostiene che gli architetti non esistono… //milestone.topics.it mauro@topics.it Appassionato di: ALM e metodologie agili Who’s Mauro?
  • 3. Avviso ai naviganti • È un mondo «nuovo» anche per il sottoscritto – Lo stile della presentazione non la ciccia…in parte anche la ciccia :-) • Tutto quello che dirò a prescindere da come lo dirò sono un set di linee guida non la verità assoluta, linee guida che devono essere calate nel contesto del progetto; – Insomma…non sono il dottore :-P • Attenti al simbolino del «take away»:
  • 4. Verità e Assiomi (…pretenzioso l’amico); • Perché mai un servizio? • A-to-mi-co; • Il bagaglio…per un viaggio; • …un viaggio specifico; Agenda…? :-)
  • 5. • i servizi si usano se servono non perché fa figo; – Questa è molto minimal…; • l’atomicità deve essere garantita sempre, magari non si può parlare di transazioni, ma l’atomicità (anche apparente) delle operazioni ci deve essere sempre; – Il driver è il bisogno del nostro utente; • ogni volta che attraversate un confine c’è un costo notevole valutate bene cosa portate con voi; – Lo stige è un viaggio senza ritorno… :-) • cercare di essere vagamente generici (ad esempio esponendo in maniera banale la CRUD) non serve a nulla; – Provate a chiedere all’ufficio postale se vi cerca un indirizzo…
  • 6. Vi ricorda qualcosa? • Boundaries are Explicit – Viaggiando attraversate dei confini…ben noti; • Service compatibility is determined based on policy: – Quando chiedete qualcosa a qualcuno sapete cosa chiedere oppure sapete cosa chiedere per sapere cosa chiedere… :-) • Services share schema and contract, not class – …non mi viene un esempio… :-/ • Services are Autonomous: – Se sostituite l’impeigato allo sportello cosa cambia?
  • 7. Verità e Assiomi (…pretenzioso l’amico); • Perché mai un servizio? • A-to-mi-co; • Il bagaglio…per un viaggio; • …un viaggio specifico; Agenda…? :-)
  • 8. Security/policy il front-end non deve poter accedere alla base dati;
  • 9. Più di un’applicazione fruisce dei nostri dati;
  • 10. Dobbiamo poter scalare orizzontalmente (ed è costoso e/o complesso scalare orizzontalmente un database)
  • 11. Dobbiamo aggregare fonti dati eterogenee al fine di renderle fruibili a diverse applicazioni senza spalmare su ogni applicazione la complessità dell’aggregazione
  • 12. …e bla bla bla… sicuramente ci sono una montagna di buonissimi motivi… Motivi e Bisogni
  • 13. Verità e Assiomi (…pretenzioso l’amico); • Perché mai un servizio? • A-to-mi-co; • Il bagaglio…per un viaggio; • …un viaggio specifico; Agenda…? :-)
  • 14. • L’utente ha il suo concetto di atomicità; • Il modello mentale dell’utente è sacro; • Ogni volta che si attraversa un confine le transazioni sono il male; A-to-mi-co…
  • 15. Nel modello mentale dell’utente le transazioni non esistono; Non si può appendere un quadro in transazione… Quindi?!?!?!
  • 16. the user-mental-model way (1) • compensazione: 1. Ciò che non ha effetti collaterali (abbandono); 2. Ciò che è cancellabile in maniera definitiva; 3. Ciò che è per forza transazionale (orticello); • Preparo tutti i documenti per la pratica edilizia; • Avvio la richiesta della pratica edilizia; • …non trovo nulla che debba essere «transazionale»; Take away
  • 17. the user-mental-model way (2) • messaggio & fotografia; 1. Inserisco un’operazione; 2. Inserisco un’operazione contraria; 3. Faccio una fotografia, cancello le operazioni fatte (se serve) e ricomincio; • La contabilità funziona così…da sempre; Take away
  • 18. …and least but not last… Idempotenza Se cercate di ripresentare la stessa pratica edilizia più volte non è che vi costruiscono più case… Take away
  • 19. Le transazioni servono perché abbiamo a che fare con un database relazionale la cui struttura dei dati ha un’atomicità molto diversa (e spesso obbligata) dal modello mentale dell’utente. Questo ci porta, da pigri, a giovare delle transazioni…anche fuori dall’orticello. …la cruda realtà…
  • 20. Verità e Assiomi (…pretenzioso l’amico); • Perché mai un servizio? • A-to-mi-co; • Il bagaglio…per un viaggio; • …un viaggio specifico; Agenda…? :-)
  • 21. Credo sia chiaro a tutti che sono sciatori…. è tutto in dipendenza del viaggio…
  • 24. Aggregate…che non vuol dire aggregate • I confini devono essere netti, altrimenti le spezie si mischiano; • Ci sono delle spezie che sono il risultato di un mix…ma sono delle nuove spezie diverse; • Brutalmente detto significa che avete più rappresentazioni dello stesso dato per «use case» diversi…ma è veramente lo stesso dato? Take away
  • 25. Verità e Assiomi (…pretenzioso l’amico); • Perché mai un servizio? • A-to-mi-co; • Il bagaglio…per un viaggio; • …un viaggio specifico; Agenda…? :-)
  • 26. Ho detto sciatori?….scusate intendevo alpinisti. …un viaggio specifico
  • 28. Allora perché fate questo? public interface IApplicationService { void Save( DomainEntity entity ); } Che cosa manca di fondamentale?
  • 30. • Cosa, Perché e Come rappresentano le intenzioni; • Save( Object ) non dichiara nulla delle intenzioni, o magari non dichiara abbastanza; • ChangeCustomerAddress è molto più esplicativo; • La generalizzazione porta inevitabilmente alla perdita di controllo; • I contratti di un servizio sono il posto sbagliato per generalizzare altrimenti finite con il chiedere l’indirizzo al postino; criminal intent Take away
  • 31. …a meno che… Piccolo spazio pubblicità… «messaggi»
  • 32. …è un mondo dificile… «duale»
  • 33. duale: lettura • la “catena” delle operazioni che portano il dato a chi ne ha bisogno, nella forma in cui ne ha bisogno, deve essere il più corta possibile; • Più la catena è lunga più si tende a generalizzare: – Limiti: che portano a sacrificare la qualità a favore dei costi; – Con i servizi i costi sono già alti quindi sacrificare è solo controproducente; – l’unica cosa che ha molto senso inserire nella pipeline di lettura è la Take away security;
  • 34. duale: scrittura • La scrittura ha molto senso che segua una strada diversa, con servizi diversi; – Con tutta la «pipeline» che serve; • Fondamentale, in scrittura, è cambiare punto di vista, non più in termini di “salva questo grafo di oggetti” ma in termini di “porta il tuo (del servizio) grafo dallo stato in cui è a questo nuovo stato”; – CQRS e Event Sourcing; • Snapshop e ChangeSet – abbiamo una situazione nota (uno Snapshot) e dato un set di modifiche (ChangeSet) vogliamo passare ad una nuova situazione nota; Take away
  • 36. per l’utente è uno solo • Costa? moltissimo; – Skill; – Codice, tanto codice (ma noi abbiamo i tool); • Costa? pochissimo; – Sul medio-lungo termine; – È molto più manutenibile; – È molto più flessibile; Take away
  • 37. Andiamo a mangiare… Domande? Welcome to the DDD World.