SlideShare a Scribd company logo
1 of 161
Download to read offline
Stai guardando i
dati sbagliati




             @ziobrando
About me
In the IT field since ZX Spectrum
Generally in large scale projects (I might be
biased)
Strategic IT Consultant
Trainer (Avanscoperta & Skills Matter)
Technical Writer
Blogger: http://ziobrando.blogspot.com
Twitter: @ziobrando


My e-mail: alberto.brandolini@gmail.com
What I do
Agile processes
Domain-Driven Design
Efficiency & Management
Architecture
Funny clown                     9%
                          11%
                                      38%

                     12%




                                31%
Preludio
Stai guardando i dati sbagliati
Il problema

(o quella strana situazione
  che riteniamo essere il
         problema)
Architettura
Risultati
incredibil
i
Finché...
Stai guardando i dati sbagliati
JENGA!
Perché?
L’architettura più
     comune?
Data-based
Application   Application   Application




http://martinfowler.com/bliki/
   IntegrationDatabase.html
on
           at ion          ica
                                 ti           on
                                                      ti on
  Applic
                    Ap
                      pl
                                 li   ca
                                           ti
                                             pli
                                                 ca                 ti on
                               pp          Ap               li ca
     Ap
                           A
                                                          pp            ati on
       pl
                                                        A
                                                                pplic
          ic   at
                                                              A
                    io
                      n
Database

                                                               a ti on
                                                     pplic                  Databas
                                                   A                           e

Data-based integration
Poi, su questa
  architettura...
qualche problema
    è emerso.
Eccessivo accoppiamento
Stai guardando i dati sbagliati
Allungamento tempi
di sviluppo
Allungamento tempi
di sviluppo
      Affidabilità in calo
Allungamento tempi
di sviluppo
       Affidabilità in calo
Bug a sorpresa
Allungamento tempi
di sviluppo
       Affidabilità in calo
Bug a sorpresa
        Riunioni, riunioni,
Allungamento tempi
di sviluppo
       Affidabilità in calo
Bug a sorpresa
        Riunioni, riunioni,
Notti
Allungamento tempi
di sviluppo
       Affidabilità in calo
Bug a sorpresa
        Riunioni, riunioni,
Notti
              Addio ferie
Stai guardando i dati sbagliati
Potremmo
 applicare
  SOA!!!
SOA?

Application      Application   Application




              Service Layer
...e questo?
Application      Application   Application




              Service Layer
Magari più avanti
SOA :-/

Application        Application   Application




                Service Layer
Insegnare
ai maiali a
mangiare
   con le
  posate!
Magazzino...
      ID_Articolo Giacenza
        1234         0
Magazzino...
                          ID_Articolo Giacenza
Consegna Fornitore(100)     1234        100


               UPDATE Giacenza
               SET Giacenza=100
               WHERE ID_articolo=1234
Magazzino...
                             ID_Articolo Giacenza
Spedizione a cliente(50)       1234        50


                           UPDATE Giacenza
                           SET Giacenza=50
                           WHERE ID_articolo=1234
Magazzino...
                       ID_Articolo Giacenza
Danneggiamento(12)       1234        38


                     UPDATE Giacenza
                     SET Giacenza=38
                     WHERE ID_articolo=1234
Magazzino...
                   ID_Articolo Giacenza
Smarrimento(2)       1234        36


                 UPDATE Giacenza
                 SET Giacenza=36
                 WHERE ID_articolo=1234
Magazzino...
                    ID_Articolo Giacenza
Ritrovamento(1)       1234        37


                  UPDATE Giacenza
                  SET Giacenza=37
                  WHERE ID_articolo=1234
Magazzino...
                ID_Articolo Giacenza
Reso(5)           1234         ?
Magazzino...
                      ID_Articolo Giacenza
Controllo               1234        32
Disponibilità(32)

                    UPDATE Giacenza
                    SET Giacenza=32
                    WHERE ID_articolo=1234
Che fine hanno
        fatto?
• Consegna Fornitore (100)
• Spedizione al cliente(50)
• Danneggiamento(12)
• Smarrimento(2)
• Ritrovamento(1)
• Reso(5)
• Controllo Disponibilità(32)
Requirements
RequirementsND
              A
RequirementsND
                 A
Vogliamo sapere in ogni istante
quale utente ha compiuto quale
operazione
RequirementsND
                 A
Vogliamo sapere in ogni istante
quale utente ha compiuto quale
operazione
Tutte le operazioni di accesso e
modifica del dato da parte delle
applicazioni devono essere
tracciate
Stai guardando i dati sbagliati
Logging
Application      Application   Application




              Service Layer
Stai guardando i dati sbagliati
Stai guardando i dati sbagliati
Stai guardando i dati sbagliati
C’è sempre chi scavalca
We
Data
I dati sono il cuore del nostro sistema




Abbiamo un problema di dati sporchi
I dati sono il cuore del nostro sistema




Abbiamo un problema di dati sporchi
oops
We
Data
What about
       ?
Come si arriva fin
     qua?
Con le migliori intenzioni
Da una base semplice
Come si fanno le
  cose grandi?
Come le piccole,
       solo
 ...più grandi!
Si imita...
Ci si documenta...
Stai guardando i dati sbagliati
Sviluppi lenti
Bug   Notti insonni
       Procedure
Complessità    Rework
 Sprechi      Turnover
Possibile che non
  ci sia un altro
      modo?
Mossa N°1
          -
      Aggregates
Le cose che cambiano insieme stanno
Aggregate
                boundaries?
    Ordine
mod_spedizione
                          VoceOrdine       Articolo
importo
                         Quantità      Descrizione
                                       prezzo
          destinatario


      Cliente
indirizzo
Cambiano per motivi
      diversi
     Ordine
 mod_spedizione
                    VoceOrdine       Articolo
 importo
                  Quantità       Descrizione
                  prezzo         prezzo
                  descrizione


   Destinatario
 indirizzo




       Cliente
 indirizzo
Gli aggregati sono
parte del modello
...e smettiamo di
   dare la colpa
      all’ORM!
Stai guardando i dati sbagliati
Quali attributi
 sono necessari
     per il
comportamento?
Notifica al resto del
 sistema mediante
  Domain Events
Mossa N°2
        -
 Event Sourcing
La verità è nel flusso degli eventi
The paper based system
Lo stato del
     sistema è il
   risultato della
  sequenza degli
eventi che lo hanno
     interessato
Cart.CreateEmpty()
.apply(ItemAdded(...))
.apply(ItemAdded(...))
.apply(ItemAdded(...))




       => Il carrello è attivo
Non c’è perdita di
  informazione
Mossa N°3
        -
      CQRS
Command/Query Responsibility
No compromessi
Command




!
    Indirizzati ad entità singole
    il comportamento è
    importante
    la Flessibilità è importante




                            © Alberto Brandolini - 2010
Query Grosse quantità di dati



?
        Non c’è comportamento
        le Prestazioni sono importanti
        Disponibili numerosi
        componenti off-the shelf
                                 © Alberto Brandolini - 2010
!   Architettura ottimizzata
         per i comandi




?   Architettura ottimizzata
         per le letture
Domain Model
                             Command       Aggregate         Event
                                                                          Event store
                                                             Event
                                                              Event
                                                                              Event
                   UI                                                          Event


                                 Command         Aggregate
                                                                Event
                                                                  Event
Presentatio




                        UI
     n




                                                                                   Event


              UI


                                                                            Projection

                               DTO                                               Projection

                   UI
                                           DTO




                                                                          Read Model
Come non fare la
dichiarazione dei
     redditi
Stai guardando i dati sbagliati
Cara... Ti
 ricordi dove ho
messo i documenti
     sanitari?
Come fare la
dichiarazione dei
     redditi
Stai guardando i dati sbagliati
Tell don’t Ask
o ...tradotto in
  romagnolo
Me a ni vò savê
     gnît
Computer

Ottimo nelle
operazioni ripetitive.
Si ricorda di fare le
cose
Notifica con facilità
Mossa N°4
         -
  Bounded Contexts
Definiamo i reali confini delle componenti
Più modelli
  Product                                         Delivery
                          Publishing
development
                                        Sales

              Marketing                            Customer Care

                                       Payments
Bounded Context
• Linguaggio consistente all’interno
• Un obiettivo ben preciso
•Interlocutori ben definiti
•Modelli indipendenti
•Possibilità di scelte strategiche
  indipendenti
Eventi e Contesti
                                                                                                                                        Item
                                                                                                                                        delivered
                                                                Item                                                Order
Product                                                         Available                                           Received
Designed
        Product for
              Product
                                                                for Sales
                                                                                                                               Delivery
              Ready                                 Publishing                    Cart
                                                                                  Created
      development
              Sales
                                                    Item                                                Order                   Availability
           Product
           Tested
                                  Visual
                                  Content
                                                    Published                          Sales            Fulfilled               Ubdated

                                  approved
                                                                                    Item
                                                                                    Added to
                        Marketing            Text
                                             Content
                                                                                    Cart
                                                                                                                                 Customer Care
                                             approved                                                                               Issue
                                                                                            Payment                                                 Issue Solved
                           Sales price                                                      Initiated        Payment                Opened
                           defined                                                                           Accepted
                                                                       Payment
                                                                       Type       Payments
                                                                       Selected                           Payment
                                                                                                          Refused
Accesso esclusivo
L’appetito vien mangiando
Me a voj esr
padrò’ in tla mi ca’
Possibili più
rappresentazioni
  dello stesso
    concetto
Stai guardando i dati sbagliati
Offerta != Contratto
Offerta != Contratto
Bozza != Contratto
Offerta != Contratto
Bozza != Contratto
 Carrello != Ordine
Offerta != Contratto
Bozza != Contratto
 Carrello != Ordine
 Ordine != Ordine
Offerta != Contratto
 Bozza != Contratto
  Carrello != Ordine
  Ordine != Ordine


Sorgente != eseguibile
No compromessi
Requisiti in
 conflitto?
Prestazioni?
No conflitti lock
append only     NoSQL
   eventual consistency
       data push model
table per view Event
   no queries   Stores
  Scalabilità su read
Stai guardando i dati sbagliati
ma...
Non solo velocità
Non dobbiamo fare
 gli stessi errori
   più in fretta
Stakeholders
Sicurezza?
Requirements
RequirementsND
              A
RequirementsND
                 A
L’utente X non deve poter
accedere all’informazione A
RequirementsND
                 A
L’utente X non deve poter
accedere all’informazione A
I campi della tabella K devono
essere filtrati perché gli utenti Y
e Z non possano vederli.
RequirementsND
                 A
L’utente X non deve poter
accedere all’informazione A
I campi della tabella K devono
essere filtrati perché gli utenti Y
e Z non possano vederli.
L’informazione N deve essere di
sola lettura per l’utente W
Interessante...
Stai guardando i dati sbagliati
Mettiamo il
 badge ai
  maiali!
Testo

               rity
          ec u a ls
         S
            d en ti
        cre
Bounded Context?
  Product                                         Delivery
                          Publishing
development
                                        Sales

              Marketing                            Customer Care

                                       Payments
Cose di cui parlo




Cose a cui devo avere accesso
Stai guardando i dati sbagliati
Stai guardando i dati sbagliati
Stai guardando i dati sbagliati
Stai guardando i dati sbagliati
Il sistema è
append-only
Non posso
inserire dati “a
   manazza”
Non è tutto qui...
Event view
                                                                                                                                             Item
                                                                                                                                             delivered
                                                                      Item                                                Order
Product                                                               Available                                           Received
Designed                                                              for Sales
                     Product
                     Ready for                                                          Cart
                     Sales                                                              Created

                                                          Item                                                Order                  Availability
           Product                      Visual            Published                                           Fulfilled              Ubdated
           Tested                       Content
                                        approved
                                                                                          Item
                                                                                          Added to
                                                   Text                                   Cart
                                                   Content
                                                   approved                                                                              Issue
                                                                                                  Payment                                                Issue Solved
                                 Sales price                                                      Initiated        Payment               Opened
                                 defined                                                                           Accepted
                                                                             Payment
                                                                             Type
                                                                             Selected                           Payment
                                                                                                                Refused
...e sulle relazioni
                                                                                                                                             Item
                                                                                                                                             delivered
                                                                      Item                                                Order
Product                                                               Available                                           Received
Designed                                                              for Sales
                     Product
                     Ready for                                                          Cart
                     Sales                                                              Created

                                                          Item                                                Order                  Availability
           Product                      Visual            Published                                           Fulfilled              Ubdated
           Tested                       Content
                                        approved
                                                                                          Item
                                                                                          Added to
                                                   Text                                   Cart
                                                   Content
                                                   approved                                                                              Issue
                                                                                                  Payment                                                Issue Solved
                                 Sales price                                                      Initiated        Payment               Opened
                                 defined                                                                           Accepted
                                                                             Payment
                                                                             Type
                                                                             Selected                           Payment
                                                                                                                Refused
Requisiti al bacio
     Quando il cliente effettua
   un ordine deve essere spedita
      un’e-mail di conferma



Dato un cliente registrato X
Quando X effettua un ordine
Allora il sistema dovrebbe spedire un e-
mail
Value flow

  Product                                         Delivery
                          Publishing
development
                                        Sales

              Marketing                            Customer Care

                                       Payments
Sicuri che sia
chiaro a tutti?
gli esperti ci        e noi
aiutano a capire   aiutiamo loro



                       © Alberto Brandolini 2009
Flussi di lavoro
                                                                                                                                                      Item
                                                                                                                                                      delivered
                                                                             Item                                                Order
Product                                                                      Available                                           Received
Designed
           Product for
                 Product
                                                                             for Sales
                                                                                                                                            Delivery
                 Ready                                           Publishing                    Cart
                                                                                               Created
         development
                 Sales
                                                                 Item                                                Order                   Availability
             Product
             Tested
                                               Visual
                                               Content
                                                                 Published                          Sales            Fulfilled               Ubdated

                                               approved
                                                                                                 Item
                                                                                                 Added to
                                   Marketing              Text
                                                          Content
                                                                                                 Cart
                                                                                                                                              Customer Care
                                                          approved                                                                                 Issue
                                                                                                         Payment                                                   Issue Solved
                                        Sales price                                                      Initiated        Payment                  Opened
                                        defined                                                                           Accepted
Design     Test        Ready                                                        Payment
                                                                                    Type       Payments
                                                                                    Selected                           Payment
                               To do   Doing      Ready                                                                                      New         Working   Resolved
                                                                                                                       Refused
See the whole?
Kanban Board
      =
 Bottleneck
  Detector
Ecosistema
Riunioni?

            Bug?
Conflitti?
        Esperimenti?
Riunioni?

            Bug?
Conflitti?
        Esperimenti?
Valore?
Conclusioni
Ogni mossa porta
     valore
Devo farle tutte?




         No, ma...
Implementazioni
    parziali
Ottimizzazione
  percorsi di
    crescita
Strumenti...




           geteventstore.co
Rimboccars
i
le maniche!
Stai guardando i dati sbagliati
Ripresa?
Domande?
Grazie!




@ziobrando
alberto.brandolini@avanscoperta.it
Implementing Domain-Driven Design
Vaughn Vernon


http://www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/
0321834577




                                 Event Centric
                                 Greg Young

                               http://www.amazon.com/Event-Centric-Simplicity-Addison-Wesley-Signature/dp/0321768221




                                 Per saperne di più... www.avanscoperta.it
Domain-Driven Design
Eric Evans

    Enterprise Integration
                  Patterns
Gregor Hohpe, Bobby Woolf




Patterns of Enterprise
Application Architecture
Martin Fowler



  Per saperne di più... www.avanscoperta.it

More Related Content

Viewers also liked

C# e la Framework Class Library
C# e la Framework Class LibraryC# e la Framework Class Library
C# e la Framework Class LibraryManuel Scapolan
 
JavaScript Object Oriented
JavaScript Object OrientedJavaScript Object Oriented
JavaScript Object OrientedManuel Scapolan
 
AntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatoreAntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatoreManuel Scapolan
 
TFS and Scrum - Lessons Learned
TFS and Scrum - Lessons LearnedTFS and Scrum - Lessons Learned
TFS and Scrum - Lessons LearnedManuel Scapolan
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRSManuel Scapolan
 
Entity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateEntity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateManuel Scapolan
 
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
 
Costruire l'identità digitale con il piano editoriale
Costruire l'identità digitale con il piano editorialeCostruire l'identità digitale con il piano editoriale
Costruire l'identità digitale con il piano editorialeFederico Venturini
 
Object-oriented Programming-with C#
Object-oriented Programming-with C#Object-oriented Programming-with C#
Object-oriented Programming-with C#Doncho Minkov
 
The final words about software estimation
The final words about software estimationThe final words about software estimation
The final words about software estimationAlberto Brandolini
 

Viewers also liked (17)

C# e la Framework Class Library
C# e la Framework Class LibraryC# e la Framework Class Library
C# e la Framework Class Library
 
JavaScript Object Oriented
JavaScript Object OrientedJavaScript Object Oriented
JavaScript Object Oriented
 
AntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatoreAntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatore
 
JavaScript
JavaScriptJavaScript
JavaScript
 
TFS and Scrum - Lessons Learned
TFS and Scrum - Lessons LearnedTFS and Scrum - Lessons Learned
TFS and Scrum - Lessons Learned
 
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
 
Entity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateEntity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernate
 
NOSQL
NOSQLNOSQL
NOSQL
 
Scrum? E' come fare il bucato!
Scrum? E' come fare il bucato!Scrum? E' come fare il bucato!
Scrum? E' come fare il bucato!
 
Costruire l'identità digitale con il piano editoriale
Costruire l'identità digitale con il piano editorialeCostruire l'identità digitale con il piano editoriale
Costruire l'identità digitale con il piano editoriale
 
Liberate il kraken
Liberate il krakenLiberate il kraken
Liberate il kraken
 
OOP with C#
OOP with C#OOP with C#
OOP with C#
 
HTML e CSS
HTML e CSSHTML e CSS
HTML e CSS
 
Object-oriented Programming-with C#
Object-oriented Programming-with C#Object-oriented Programming-with C#
Object-oriented Programming-with C#
 
Event storming recipes
Event storming recipesEvent storming recipes
Event storming recipes
 
The final words about software estimation
The final words about software estimationThe final words about software estimation
The final words about software estimation
 

Similar to Stai guardando i dati sbagliati

Webinar: "Conosci la Performance Intelligence?" a cura d A. Szambelan
Webinar: "Conosci la Performance Intelligence?" a cura d A. SzambelanWebinar: "Conosci la Performance Intelligence?" a cura d A. Szambelan
Webinar: "Conosci la Performance Intelligence?" a cura d A. SzambelanMiriade Spa
 
Blomming Lean Startup @ Better Software 2011
Blomming Lean Startup @ Better Software 2011Blomming Lean Startup @ Better Software 2011
Blomming Lean Startup @ Better Software 2011Nicola Junior Vitto
 
Un plug-in Eclipse per il supporto all'Extract Class Refactoring
Un plug-in Eclipse per il supporto all'Extract Class RefactoringUn plug-in Eclipse per il supporto all'Extract Class Refactoring
Un plug-in Eclipse per il supporto all'Extract Class RefactoringFabio Palomba
 
Software ...e tutto ciò che comporta
Software ...e tutto ciò che comportaSoftware ...e tutto ciò che comporta
Software ...e tutto ciò che comportaAlberto Brandolini
 
Generazione Automatica Di Codice Orientato Agli Oggetti Tramite
Generazione Automatica Di Codice Orientato Agli Oggetti TramiteGenerazione Automatica Di Codice Orientato Agli Oggetti Tramite
Generazione Automatica Di Codice Orientato Agli Oggetti TramiteMarco Montanari
 
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
 
Predictive Maintenance per le aziende del nord-est con Azure e IoT
Predictive Maintenance per le aziende del nord-est con Azure e IoTPredictive Maintenance per le aziende del nord-est con Azure e IoT
Predictive Maintenance per le aziende del nord-est con Azure e IoTMarco Parenzan
 
Viaggio attraverso il Cloud - Cos'è AWS?
Viaggio attraverso il Cloud - Cos'è AWS?Viaggio attraverso il Cloud - Cos'è AWS?
Viaggio attraverso il Cloud - Cos'è AWS?Amazon Web Services
 
Tecniche Di Troubleshooting Nei Sistemi Distribuiti
Tecniche Di Troubleshooting Nei Sistemi DistribuitiTecniche Di Troubleshooting Nei Sistemi Distribuiti
Tecniche Di Troubleshooting Nei Sistemi DistribuitiK-Tech Formazione
 
The Retail Revolution - Antonio Nappi & Enzo Carrea - Codemotion Milan 2016
The Retail Revolution - Antonio Nappi & Enzo Carrea - Codemotion Milan 2016The Retail Revolution - Antonio Nappi & Enzo Carrea - Codemotion Milan 2016
The Retail Revolution - Antonio Nappi & Enzo Carrea - Codemotion Milan 2016Codemotion
 
PMexpo17 - La trasformazione agile in ANAS - F. Pescatore, M. Negri
PMexpo17 - La trasformazione agile in ANAS - F. Pescatore, M. NegriPMexpo17 - La trasformazione agile in ANAS - F. Pescatore, M. Negri
PMexpo17 - La trasformazione agile in ANAS - F. Pescatore, M. NegriPMexpo
 
Internet of things revolution
Internet of things revolutionInternet of things revolution
Internet of things revolutionStefano Panichi
 
AgileIoT, da Arduino al Delivery
AgileIoT, da Arduino al DeliveryAgileIoT, da Arduino al Delivery
AgileIoT, da Arduino al DeliveryFelice Pescatore
 
Smau Milano 2019 AIPSI
Smau Milano 2019 AIPSISmau Milano 2019 AIPSI
Smau Milano 2019 AIPSISMAU
 
Node.js – Convincing the boss
Node.js – Convincing the bossNode.js – Convincing the boss
Node.js – Convincing the bossClaudio Cicali
 

Similar to Stai guardando i dati sbagliati (20)

Webinar: "Conosci la Performance Intelligence?" a cura d A. Szambelan
Webinar: "Conosci la Performance Intelligence?" a cura d A. SzambelanWebinar: "Conosci la Performance Intelligence?" a cura d A. Szambelan
Webinar: "Conosci la Performance Intelligence?" a cura d A. Szambelan
 
Blomming Lean Startup @ Better Software 2011
Blomming Lean Startup @ Better Software 2011Blomming Lean Startup @ Better Software 2011
Blomming Lean Startup @ Better Software 2011
 
Un plug-in Eclipse per il supporto all'Extract Class Refactoring
Un plug-in Eclipse per il supporto all'Extract Class RefactoringUn plug-in Eclipse per il supporto all'Extract Class Refactoring
Un plug-in Eclipse per il supporto all'Extract Class Refactoring
 
Software ...e tutto ciò che comporta
Software ...e tutto ciò che comportaSoftware ...e tutto ciò che comporta
Software ...e tutto ciò che comporta
 
Software Testing Forum 2012 - Polarion e TRS SpA
Software Testing Forum 2012 - Polarion e TRS SpASoftware Testing Forum 2012 - Polarion e TRS SpA
Software Testing Forum 2012 - Polarion e TRS SpA
 
Generazione Automatica Di Codice Orientato Agli Oggetti Tramite
Generazione Automatica Di Codice Orientato Agli Oggetti TramiteGenerazione Automatica Di Codice Orientato Agli Oggetti Tramite
Generazione Automatica Di Codice Orientato Agli Oggetti Tramite
 
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
 
Smau Nanosoft
Smau NanosoftSmau Nanosoft
Smau Nanosoft
 
Predictive Maintenance per le aziende del nord-est con Azure e IoT
Predictive Maintenance per le aziende del nord-est con Azure e IoTPredictive Maintenance per le aziende del nord-est con Azure e IoT
Predictive Maintenance per le aziende del nord-est con Azure e IoT
 
Bdd
BddBdd
Bdd
 
Aws
AwsAws
Aws
 
Viaggio attraverso il Cloud - Cos'è AWS?
Viaggio attraverso il Cloud - Cos'è AWS?Viaggio attraverso il Cloud - Cos'è AWS?
Viaggio attraverso il Cloud - Cos'è AWS?
 
Tecniche Di Troubleshooting Nei Sistemi Distribuiti
Tecniche Di Troubleshooting Nei Sistemi DistribuitiTecniche Di Troubleshooting Nei Sistemi Distribuiti
Tecniche Di Troubleshooting Nei Sistemi Distribuiti
 
The Retail Revolution - Antonio Nappi & Enzo Carrea - Codemotion Milan 2016
The Retail Revolution - Antonio Nappi & Enzo Carrea - Codemotion Milan 2016The Retail Revolution - Antonio Nappi & Enzo Carrea - Codemotion Milan 2016
The Retail Revolution - Antonio Nappi & Enzo Carrea - Codemotion Milan 2016
 
PMexpo17 - La trasformazione agile in ANAS - F. Pescatore, M. Negri
PMexpo17 - La trasformazione agile in ANAS - F. Pescatore, M. NegriPMexpo17 - La trasformazione agile in ANAS - F. Pescatore, M. Negri
PMexpo17 - La trasformazione agile in ANAS - F. Pescatore, M. Negri
 
Internet of things revolution
Internet of things revolutionInternet of things revolution
Internet of things revolution
 
AgileIoT, da Arduino al Delivery
AgileIoT, da Arduino al DeliveryAgileIoT, da Arduino al Delivery
AgileIoT, da Arduino al Delivery
 
Smau Milano 2019 AIPSI
Smau Milano 2019 AIPSISmau Milano 2019 AIPSI
Smau Milano 2019 AIPSI
 
OOP... Object Whaaat?
OOP... Object Whaaat?OOP... Object Whaaat?
OOP... Object Whaaat?
 
Node.js – Convincing the boss
Node.js – Convincing the bossNode.js – Convincing the boss
Node.js – Convincing the boss
 

More from Alberto Brandolini

L'illusione dell'ortogonalità
L'illusione dell'ortogonalitàL'illusione dell'ortogonalità
L'illusione dell'ortogonalitàAlberto Brandolini
 
Redesigning everything ITARC Stockholm 2021
Redesigning everything ITARC Stockholm 2021Redesigning everything ITARC Stockholm 2021
Redesigning everything ITARC Stockholm 2021Alberto Brandolini
 
Redesigning everything (avanscoperta meeutp edition)
Redesigning everything (avanscoperta meeutp edition)Redesigning everything (avanscoperta meeutp edition)
Redesigning everything (avanscoperta meeutp edition)Alberto Brandolini
 
Software design as a cooperative game with EventStorming
Software design as a cooperative game with EventStormingSoftware design as a cooperative game with EventStorming
Software design as a cooperative game with EventStormingAlberto Brandolini
 
Reshaping enterrprise software
Reshaping enterrprise softwareReshaping enterrprise software
Reshaping enterrprise softwareAlberto Brandolini
 
Idea stickies green bar - Wroclaw edition
Idea stickies green bar - Wroclaw editionIdea stickies green bar - Wroclaw edition
Idea stickies green bar - Wroclaw editionAlberto Brandolini
 
Why do all my ddd apps look the same - Vienna 2014
Why do all my ddd apps look the same - Vienna 2014Why do all my ddd apps look the same - Vienna 2014
Why do all my ddd apps look the same - Vienna 2014Alberto Brandolini
 
Bullshit Asymmetry Principle lightning talk
Bullshit Asymmetry Principle lightning talkBullshit Asymmetry Principle lightning talk
Bullshit Asymmetry Principle lightning talkAlberto Brandolini
 

More from Alberto Brandolini (20)

L'illusione dell'ortogonalità
L'illusione dell'ortogonalitàL'illusione dell'ortogonalità
L'illusione dell'ortogonalità
 
Redesigning everything ITARC Stockholm 2021
Redesigning everything ITARC Stockholm 2021Redesigning everything ITARC Stockholm 2021
Redesigning everything ITARC Stockholm 2021
 
What lies beneath
What lies beneathWhat lies beneath
What lies beneath
 
Redesigning everything (avanscoperta meeutp edition)
Redesigning everything (avanscoperta meeutp edition)Redesigning everything (avanscoperta meeutp edition)
Redesigning everything (avanscoperta meeutp edition)
 
Extreme DDD modelling
Extreme DDD modellingExtreme DDD modelling
Extreme DDD modelling
 
The gordian knot
The gordian knotThe gordian knot
The gordian knot
 
Software design as a cooperative game with EventStorming
Software design as a cooperative game with EventStormingSoftware design as a cooperative game with EventStorming
Software design as a cooperative game with EventStorming
 
La fatina dei denti
La fatina dei dentiLa fatina dei denti
La fatina dei denti
 
50.000 orange stickies later
50.000 orange stickies later50.000 orange stickies later
50.000 orange stickies later
 
The alignment
The alignmentThe alignment
The alignment
 
Chasing elephants
Chasing elephantsChasing elephants
Chasing elephants
 
Optimized for what
Optimized for whatOptimized for what
Optimized for what
 
Reshaping enterrprise software
Reshaping enterrprise softwareReshaping enterrprise software
Reshaping enterrprise software
 
The precision blade
The precision bladeThe precision blade
The precision blade
 
Idea stickies green bar - Wroclaw edition
Idea stickies green bar - Wroclaw editionIdea stickies green bar - Wroclaw edition
Idea stickies green bar - Wroclaw edition
 
Why do all my ddd apps look the same - Vienna 2014
Why do all my ddd apps look the same - Vienna 2014Why do all my ddd apps look the same - Vienna 2014
Why do all my ddd apps look the same - Vienna 2014
 
Managing debt remastered
Managing debt remasteredManaging debt remastered
Managing debt remastered
 
The sweet spot
The sweet spotThe sweet spot
The sweet spot
 
Bullshit Asymmetry Principle lightning talk
Bullshit Asymmetry Principle lightning talkBullshit Asymmetry Principle lightning talk
Bullshit Asymmetry Principle lightning talk
 
It's not simple at all
It's not simple at allIt's not simple at all
It's not simple at all
 

Stai guardando i dati sbagliati

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. Qualche collega mi ha raccontato questa storia. Assumo non sia una barzelletta.\n\nA causa di un furto, il collega si reca in caserma per una denuncia. Il militare scrive la denuncia al computer, stampa, fa firmare e ...cancella il file! Il collega, basito, chiede: “ma perché lo ha cancellato?” ... “tanto non serviva più!”\n
  6. Ok, proviamo a raccontare il punto di partenza, anche se lo conosciamo benissimo.\n
  7. Parliamo di architettura. \nO meglio, di architettura software.\nO meglio, di quella che ci hanno fatto credere sia un’architettura software.\n\n
  8. Che è tutto sommato questa. Il Jenga.\nUn’architettura che con un sacco di pratica permette di ottenere dei risultati incredibili, tipo due applicazioni che si parlano, senza che il server cada troppo spesso.\n
  9. Solo che ogni tanto... va giù. Aggiungendo una feature, un requisito, una componente esterna. Ad un certo punto collassa.\n
  10. E tutti gridano insieme “JENGA!” ed in tutta l’azienda si celebra una grande festa, e tutti sono felici.\n\n\n... o no?\n
  11. Perché succede tutto questo?\n
  12. Qual è realmente l’architettura più comune. Quella più diffusa nei dipartimenti IT italiani?\n
  13. È quella che Martin Fowler in “Patterns of Enterprise Application Architecture” chiama Data-Based integration.\n\nMa il fatto che sia sul libro di Fowler, non dovrebbe significare granché. I libri di pattern servono a catalogare la realtà in maniera agnostica. Senza troppi giudizi o orientamenti ideologici.\n\nIo non sono Fowler e sono molto orientato ideologicamente, e quindi posso utilizzare una notazione un po’ più espressiva.\n
  14. Questa rende decisamente meglio l’idea. \nMa i maiali mangiano di tutto, quindi per un po’ questa situazione ci è sembrata un’ottima idea.\n
  15. Ma solo per un po’.\n
  16. Perché le applicazioni hanno cominciato ad essere “un po’ troppo accoppiate” e tirare secchiate d’acqua sul server non ha aiutato a risolvere il problema.\n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. Finché qualcuno, finalmente ha avuto un’idea.\n
  24. Sì, applichiamo SOA, la soluzione migliore contro il troppo accoppiamento. Cominciamo con il disaccoppiare la presentation dal database, così “possono cambiare”\n\n... solo che però non cambiano.\n
  25. E ... non si doveva disaccoppiare anche la persistenza? Ed andare verso i Business Autonomous Components?\n
  26. ... una cosa alla volta. Intanto abbiamo messo uno strato a servizi. E questo basti. non si può fermare il progresso.\n
  27. Quindi, questa è la SOA più diffusa.\n
  28. Che sul nostro schema architetturale è un po’ come insegnare ai maiali a mangiare con le posate. È sempre la stessa sbobba nella stessa vasca, ma almeno i maiali sembrano più educati\n
  29. Però c’è un’altro problema... perché nonostante si parli di SOA nella nostra testa continua ad esserci un’altra cosa. Proviamo a fare un’esempio di una gestione magazzino. Molto semplice.\n
  30. Il fornitore consegna l’articolo 1234. Aggiorno il record corrispondente.\n
  31. Spedisco 50 articoli al cliente, aggiorno la giacenza dell’articolo corrispondente.\n
  32. Nel caso il magazziniere abbia fatto danni con il muletto, la situazione non cambia molto.\nAggiorniamo la giacenza, rimuovendo dal conteggio i preziosissimi pezzi rotti.\n
  33. Qualche pezzo non si trova (se lo sono rubato?) come trattiamo la situazione? Alla stessa maniera!\n
  34. Poi qualcuno inspiegabilmente riappare, magari è stato semplicemente appoggiato nel posto sbagliato. Cose che capitano.\n
  35. Sul reso le cose si fanno più difficili. Dobbiamo prima verificare in quali condizioni, ma non è che questa funzionalità sia stata proprio implementata...\n
  36. Poi a fine anno si fa un bell’inventario e si aggiornano i conti con la disponibilità effettiva.\n
  37. Peccato che non vi sia traccia sul database di queste operazioni.\n
  38. Per cui ad un certo punto arriva una bella richiesta di poter tracciare con esattezza che cosa succede. Chi modifica i dati e perché.\n
  39. Per cui ad un certo punto arriva una bella richiesta di poter tracciare con esattezza che cosa succede. Chi modifica i dati e perché.\n
  40. Per cui ad un certo punto arriva una bella richiesta di poter tracciare con esattezza che cosa succede. Chi modifica i dati e perché.\n
  41. Ideona!\n\n(ci risiamo)\n
  42. Un bel meccanismo di logging, che intercetta tutto l’intercettabile.\n
  43. E quindi ci agganciamo dove possiamo e scriviamo, su DB, su file system o ...dove capita, un bel flusso continuo di informazioni che si va ad affiancare al supporto persistente.\n\nLo facciamo un po’ come capita. Non è che ci siano tutte queste linee guida stringenti sul logging.\n\nA parte quella - non scritta - di scrivere un wrapper per Log4J.\n
  44. Quindi se questo era il nostro schema di partenza,\n
  45. ...mettiamo una bella telecamera a circuito chiuso per controllare che i maiali non facciano nulla di male.\n
  46. E creiamo un bel centro di controllo che 24 ore su 24 stia ad osservare cosa fanno i maiali registrando ogni loro mossa.\n
  47. ma anche così, ogni tanto qualcosa passa.\n
  48. C’è qualcosa di sinistro nelle aziende che dicono “i dati sono il cuore del nostro sistema”. È come una ragazza che conosci all’aperitivo e ti dice: “sai, io non potrei vivere senza ossigeno...” non è il modo più intelligente per impostare una conversazione!\n
  49. Ma la cosa singolare è che la maggior parte delle aziende che considerano i dati il proprio asset principale sono anche quelle che li trattano peggio.\n
  50. Anzi sono proprio loro ad avere più problemi.\n
  51. Peccato, ragazzi. \n
  52. Il punto è che non è che i dati siano il cuore, è che avete messo il database al centro dello sviluppo.\n
  53. ... e quello non era il posto che gli competeva.\n\nPerché se i dati sono il cuore, non avete trovato il posto corretto per il cervello dell’applicazione. Il suo comportamento.\n
  54. E questa cosa è veramente una bestemmia. Ed è stupefacente, perché non ho trovato nessun libro di architettura che raccomanda questo approccio. Fowler lo cita, ma principalmente perché esiste. Non perché sia buono.\n\nLa mia domanda diventa... ma perché?\n
  55. E purtroppo la risposta è semplice. Si tratta del percorso più sensato assumendo di partire senza conoscere l’architettura.\n\nPer il nostro piccolo primo progetto, si tratta di un approccio che pare andare bene.\n
  56. È la prima cosa che possiamo fare. Non dimentichiamo che all’università ci hanno insegnato solo a fare cose piccole e semplici.\n\nCome si fanno le cose grosse? Come \n
  57. Solo che man mano che i requisiti arrivano, è difficile fare crescere le nostre applicazioni. Non sappiamo come fare grandi applicazioni...\n
  58. ...quindi le facciamo nell’unico modo che conosciamo. Come le applicazioni piccole, ma con più roba dentro.\n\nTemo che la barzelletta del “come faranno 4 elefanti a stare in una 500?” possa avere influito sulle nostre scelte.\n
  59. Imitiamo il comportamento di chi è arrivato prima di noi. È così che si impara, no?\n\n(se siete interessati al tema, ne parlo nell’altra mia presentazione: http://www.slideshare.net/ziobrando/fare-pip-controvento)\n
  60. Ci si documenta sui testi di riferimento, spesso gentilmente suggeriti dal vendor.\n
  61. Ed eccoci alla nostra cara vecchia situazione di partenza.\n
  62. Bentrovati!\n
  63. \n
  64. Ok, vi ho malmenato abbastanza. Ora provo ad essere propositivo. Cominciamo da un ingrediente che abbiamo tenuto nel congelatore per un po’ ma che è sempre buono.\n
  65. Le cose che cambiano assieme stanno assieme.\n
  66. Gli aggregati definiscono gli invarianti di comportamento (considerazione business) e sulla base di questi i confini transazionali. Perché questi siano consistenti è possibile-necessario un certo livello di duplicazione.\n
  67. È interessante notare che in tutte le possibili architetture di supporto a Domain-Driven Design (DDD classico, CQRS + ES, DDD con linguaggi funzionali, etc.) il concetto di Aggregato rimane sostanzialmente identico.\n
  68. Non è colpa dell’ORM. È che lo stiamo usando male. Per mettere assieme un modello ad oggetti incoerente con un modello dei dati sbagliato.\n
  69. È come fare la sfoglia. Se la fate piccola, non ci sono problemi.\nSe la fate grande... fa le pieghe.\n
  70. ... ma anche su questo tema sono emerse variazioni sul tema. Dal modello originale che ruotava ancora abbastanza attorno ai dati (o non diceva di non farlo) siamo arrivati a qualche implementazione che separa in maniera abbastanza drastica le informazioni necessarie alla nostra applicazione per prendere delle decisioni da quelle inutili all’applicazione ma necessarie per gli operatori, per capire cosa sta succedendo. Il software non si comporta diversamente sulla base del cognome - almeno spero - ma l’utente deve poter vedere il cognome quando sta operando.\n
  71. L’altra “piccola” novità nella gestione degli aggregati è stata l’affermarsi di un paradigma di comunicazione asincrona, basato sui domain events e su meccanismi di notifica.\n
  72. Ingrediente N°2. Questo dovrebbe essere nuovo...\n
  73. ...ma in realtà non lo è.\n\nPeggio, prende ispirazione dai sistemi basati su carta. Solo che la singola sorgente di verità è ora rappresentata dagli eventi. Il flusso degli eventi mima quello dell’equivalente sistema cartaceo, senza aggiunta di complessità accidentale.\n
  74. Non è una vera novità. Il vostro conto corrente è implementato esattamente nello stesso modo. Non è una sorpresa, perché il Conto Corrente è esattamente una di quelle cose che è un po’ pericoloso implementare come uno squallido CRUD.\n
  75. Possiamo ricavare lo stato dalla sequenza degli eventi.\n\nI più smaliziati noteranno anche uno stile di programmazione che inizia ad avvicinarsi al funzionale...\n
  76. Ma questa è forse la cosa più interessante: il sistema non ha alcuna perdita di contenuto informativo. Non ci sono cancellazioni o modifiche del dato.\n
  77. Ingrediente N°3 Command Query Responsibility Segregation.\n
  78. Architettura senza compromessi.\n\n\n
  79. Sul versante dei comandi, stiamo sostanzialmente dando ordini a singole entità del nostro sistema. Il sistema deve modellare il comportamento, e permettere un’evoluzione controllata sulla base delle mutevoli esigenze del business.\n
  80. Sul versante delle query, invece... siamo interessati a grosse moli di dati, a dati aggregati magari sotto forma di grafici o report. Ma non c’è alcuna idea di comportamento.\n\n...abbiamo bisogno di un domain model?\n
  81. la nostra architettura senza compromessi...\n
  82. è sostanzialmente questa.\n\nSul lato command, abbiamo il domain model con i nostri aggregati che ricevono comandi e producono eventi.\n\nAlcune componenti (projection) sono in ascolto sulla coda degli eventi e generano i modelli di lettura necessari all’applicazione. Praticamente posso fare a meno delle query, contando su tabelle popolate in modalità push man mano che i dati si aggiornano.\n
  83. Il modello è sostanzialmente push, mi aiuto con un esempio.\n
  84. Su un modello in cui recupero le informazioni quando è necessario, scateno le query (con il rischio di appesantire il sistema) al momento della richiesta utente. \n\nSe qualche componente non risponde, ovviamente sono guai.\n
  85. \n
  86. Se fossi stato bravo - ed ogni anno ci provo - invece avrei raccolto le fatture e tutta la documentazione necessaria, man mano che arrivava in una bella carpetta ordinata.\n\nE quando finalmente il commercialista si fa sentire, ecco che io gli passo all’istante tutta la documentazione.\n
  87. È esattamente di questa cosa che stiamo parlando. Solo, ad un livello di granularità maggiore.\n
  88. Ma c’è un modo più espressivo per dirlo.\n
  89. (io non ne voglio sapere nulla)\n
  90. Il computer è perfetto per queste cose.\n\nNotificare a voce non scala. Elettronicamente sì.\n
  91. L’ultimo ingrediente, dalla seconda parte del libro di Evans che non tutti hanno letto.\n
  92. Nella nostra applicazione enterprise ci saranno più modelli.\nCi saranno sempre.\nAnche se la implementiamo in Access (nitrito di cavallo).\nPerché i modelli hanno obiettivi diversi, sono espressi da stakeholders diversi, in linguaggi diversi.\n\nDobbiamo IMPLEMENTARLI non UNIFICARLI.\n
  93. Abbiamo tutti i gradi di libertà che ci servono, ma per qualche strano motivo non vediamo l’ora di rinunciarci.\n
  94. Gli eventi avvengono in determinati contesti e contribuiscono a definire il linguaggio caratteristico del modello.\n\nEventi prodotti in un contesto possono essere consumati in un altro contesto, eventualmente tradotti e ritrasmessi.\n
  95. Ma i contesti sono indipendenti\n
  96. (voglio essere padrone a casa mia)\n
  97. Ops, questa non ve l’aspettavate. Sto forse violando il DRY?\n
  98. No, perché la semantica è diversa. I dati sono gli stessi ma cambiano per motivi diversi.\nE quello che è editabile in un certo punto del suo ciclo di vita, è di sola lettura altrove.\n\nEd il fatto che abbiano lo stesso nome , in contesti diversi non significa che abbiano lo stesso significato o lo stesso contenuto informativo.\n
  99. No, perché la semantica è diversa. I dati sono gli stessi ma cambiano per motivi diversi.\nE quello che è editabile in un certo punto del suo ciclo di vita, è di sola lettura altrove.\n\nEd il fatto che abbiano lo stesso nome , in contesti diversi non significa che abbiano lo stesso significato o lo stesso contenuto informativo.\n
  100. No, perché la semantica è diversa. I dati sono gli stessi ma cambiano per motivi diversi.\nE quello che è editabile in un certo punto del suo ciclo di vita, è di sola lettura altrove.\n\nEd il fatto che abbiano lo stesso nome , in contesti diversi non significa che abbiano lo stesso significato o lo stesso contenuto informativo.\n
  101. No, perché la semantica è diversa. I dati sono gli stessi ma cambiano per motivi diversi.\nE quello che è editabile in un certo punto del suo ciclo di vita, è di sola lettura altrove.\n\nEd il fatto che abbiano lo stesso nome , in contesti diversi non significa che abbiano lo stesso significato o lo stesso contenuto informativo.\n
  102. No, perché la semantica è diversa. I dati sono gli stessi ma cambiano per motivi diversi.\nE quello che è editabile in un certo punto del suo ciclo di vita, è di sola lettura altrove.\n\nEd il fatto che abbiano lo stesso nome , in contesti diversi non significa che abbiano lo stesso significato o lo stesso contenuto informativo.\n
  103. Ancora una volta, no compromessi. Un problema alla volta.\nEd una soluzione ottimale per QUEL problema.\n\n\n
  104. Sono veramente requisiti in conflitto o siamo noi sviluppatori che stiamo cercando di fare mettere d’accordo persone che dicono cose diverse entrambe perfettamente lecite in contesti separati e distinti.\n\n... e se avessero ragione entrambi?\n
  105. Vogliamo parlare di prestazioni di questa roba?\n
  106. Dunque, tra una mossa e l’altra, abbiamo rimosso i conflitti di lock tra letture e scritture, introdotto un meccanismo di persistenza append-only (che quindi può essere ottimizzato senza compromessi), aperto la porta a persistenza basata su NoSQL (laddove lo si ritenga necessario), introdotto un meccanismo di push sul read model che di fatto ci elimina la necessità per le cache, introdotto la possibilità di tabelle personalizzate per le viste con caricamento ancora più rapido, aperto la strada a componenti specializzati (Event Stores) per la pubblicazione ed il salvataggio degli eventi, oltre alla possibilità di scalare orizzontalmente il read model aumentando l’hardware.\n\n... senza menzionare il set di pentole in omaggio e la splendida trapunta in lana merinos!\n
  107. Va come Forrest Gump quando si libera degli intralci.\n
  108. \n
  109. Non cadete nella trappola di credere che questa cosa serva esclusivamente per questioni di prestazioni.\n\nTutt’altro.\n
  110. Le prestazioni sono in omaggio. Il vero valore è altrove.\n
  111. E sta nel fatto che stiamo programmando verso un’ecosistema.\n
  112. Facciamo un esempio... parliamo di Sicurezza.\n
  113. A chi non è mai capitato di dover gestire questi problemi?\n
  114. A chi non è mai capitato di dover gestire questi problemi?\n
  115. A chi non è mai capitato di dover gestire questi problemi?\n
  116. A chi non è mai capitato di dover gestire questi problemi?\n
  117. Io li adoro. Passerei giorni in riunioni di questo genere.\n
  118. E l’ideona classica è...\n
  119. Stabiliamo un meccanismo di controllo degli accessi. Qualcosa di figo con Aspect Oriented Programming, o un bel layer trasversale, che tutto impatti.\n
  120. Stabiliamo le credenziali di ogni utente in maniera bella complessa.\n
  121. salvo poi renderci conto di una cosa...\n
  122. Che a livello di bounded context il problema forse era già stato risolto.\n
  123. E che le cose di cui le persone parlano sono le cose che devono vedere, e che noi siamo stati così fessi da metterle tutte assieme e poi da costruire un’infrastruttura per separarle.\n
  124. E se diamo un’occhiata a questi bei fatti di cronaca? A me preoccupa soprattutto il secondo, visto che ci sono un po’ di soldi in ballo.\n\nMa un sistema basato su Event Sourcing non può essere hackerato in questo modo. Non posso alterare i voti e non posso alterare le mucche.\n
  125. E se diamo un’occhiata a questi bei fatti di cronaca? A me preoccupa soprattutto il secondo, visto che ci sono un po’ di soldi in ballo.\n\nMa un sistema basato su Event Sourcing non può essere hackerato in questo modo. Non posso alterare i voti e non posso alterare le mucche.\n
  126. \n
  127. \n
  128. Non ho ancora finito.\n
  129. La vista ad eventi ha ancora qualche sorpresa in serbo\n
  130. \n
  131. Perché e esattamente il modo in cui i nostri stakeholder esprimono i requisiti. Senza query ed integrazioni imbarazzanti. Cose che succedono e cose che devono succedere. Avere un sistema che mappa a questo livello semplifica le cose immensamente.\n
  132. ed aiuta anche non poco a capire il reale flusso di valore all’interno dell’applicazione.\nQuello che teoricamente tutti dovrebbero conoscere, ma che nella pratica non conosce bene nessuno, anche se nessuno è nelle condizioni di ammetterlo.\n
  133. Fate una prova. Modellate il flusso totale. E a modellazione finita raccogliete le cose per buttare via tutto. Osservate le reazioni.\n
  134. Ma questo è esattamente il momento in cui iniziamo attivamente a collaborare con gli esperti di dominio. Quel modello serve a loro e serve a noi.\n
  135. Non ho finito.\n\nGli eventi mappano perfettamente anche i flussi di lavoro interni ai contesti. Notare le kanban board.\n
  136. E la cosa ci può permettere di avere un controllo fine sui flussi aziendali, ad un livello di precisione mai sperimentato prima. O mai sperimentabile... costava troppo!\n
  137. Ma sappiamo anche che le kanban board sono formidabili strumenti di individuazione dei colli di bottiglia. Ci dispiace così tanto poter individuare in tempo reale quale sia il collo di bottiglia a livello di azienda?\n
  138. L’impatto è sull’intero ecosistema, non solo sulle prestazioni dell’applicazione.\nFacciamo le cose giuste e non perdiamo tempo a fare le cose sbagliate.\nImplementiamo features che portano valore ed aumentiamo la competitività dell’azienda.\n
  139. E su ciascuno di questi aspetti ci sono ricadute:\n- una corretta separazione dei bounded context riduce il numero di riunioni (parlo solo con le persone realmente interessate ad un problema, sono più disponibili perché il problema è il loro problema e questo mi riduce i tempi di attesa).\n- Se tutto è negli eventi, posso ripercorrere l’esatta sequenza che mi genera un bug. Posso correggerlo retroattivamente.\n- I conflitti sui requisiti si riducono perché una buona percentuale non sono conflitti.\n- Posso sfruttare l’infrastruttura per sperimentare implementazioni alternative o strategie di gestione alternative (“vediamo cosa sarebbe successo con due magazzini invece di uno, sulla sequenza degli eventi del 2008-2009-2010”).\n
  140. \n
  141. Ogni singola mossa è valida anche da sola ed apporta chiarezza alla realizzazione, ed introduce vantaggi sia a livello di progettazione che di esecuzione. Non è necessario che tutte le mosse siano implementate.\n
  142. Non necessariamente, ma la sinergia è comunque positiva. Sicuramente non è necessario che tutto il sistema sia in Event Sourcing. Il punto è isolare correttamente le porzioni del sistema e capire quali sono chiave per apportare valore al business. Lì ha senso intervenire.\n
  143. Ma ovviamente c’è tutto il mondo delle “fasi di transizione”.\n
  144. Uno dei più interessanti riguarda il “cosa fare se sono una piccola impresa e non ho modo di avere un sistema di grandi dimensioni”, c’è comunque modo di avere interessanti integrazioni leggere anche a livello di coordinamento di task sostanzialmente manuali.\n\nIl fatto di avere sotto controllo un sistema che possa evidenziare i colli di bottiglia ci aiuta anche a capire qual è la prossima feature che necessita di un’automazione.\n
  145. C’è fermento! Ma è anche vero che Domain-Driven Design è rimasto interessante forse proprio perché non sono arrivati i vendor a vendere “cassoni” costosissimi trasformando un’impostazione architetturale sensata (SOA dei primi tempi) in un mercato delle vacche.\n
  146. ma sicuramente del lavoro da fare ce n’è. Non dimentichiamo che ci sono anni ed anni di calcare da togliere dai server.\n
  147. Facendo le cose con sale in zucca.\n
  148. ...perché (e qui alzo il tiro) la ripresa delle aziende dipende in larga parte da quanto siamo in grado di renderle efficienti. Si parte anche da qui. Il prima possibile.\n
  149. \n
  150. \n
  151. \n
  152. \n