Il corso

DDD, dalla teoria alla pratica

Esploriamo i pattern di DDD e CQRS costruendo da zero un’applicazione a microservizi.

ddd cqrs

Il corso DDD, dalla teoria alla pratica

Nel mondo dello sviluppo software, il Domain Driven Design offre una chiave di lettura che ben si adatta alla crescente complessità che le aziende sono chiamate ad affrontare. 

In questo corso ti porti a casa una chiara comprensione di questo approccio e delle sue potenzialità a livello organizzativo e architetturale. Ma questo è solo l’inizio.

A differenza di altri corsi, dove la teoria non ha poi un riscontro pratico, in questo corso lavorerai con i docenti allo sviluppo di una applicazione completa e funzionante. Questo ti permetterà di vedere concretamente come implementare i pattern di questo approccio, offrendoti una solida base di partenza per introdurre gli stessi concetti nelle tue applicazioni.

DDD, dalla teoria alla pratica
2a edizione – remoto

Questa sarà la versione da remoto del corso già erogato in MIA-Platform a novembre 2023.


Quando
: 15-16-17-22-23-24 Aprile 2024

Dove: Online

Orario: 9-13

Early Bird: 1000 euro (iva inclusa) fino al 15/03
Regular price:
1200 euro (iva inclusa)

Il ruolo di DDD nello sviluppo software

Il Domain Driven Design (DDD) è un approccio allo sviluppo che consente di tenere sotto controllo la complessità delle soluzioni software moderne. DDD offre strumenti concreti per suddividere le applicazioni in unità indipendenti, creando modelli comprensibili sia dagli sviluppatori che dagli esperti di dominio.

Ecco alcuni motivi per cui il DDD risulta utile nello sviluppo software:

  1. Collaborazione e comprensione approfondita del Dominio

Il DDD incoraggia gli esperti del dominio a lavorare a stretto contatto con gli sviluppatori, per comprendere a fondo il contesto del problema. Questa comprensione migliora la comunicazione tra gli sviluppatori e gli stakeholder del dominio, riducendo la possibilità di fraintendimenti.

  1. Comunicazione efficace attraverso l’Ubiquitous Language

DDD promuove l’uso di un “linguaggio ubiquo” condiviso tra sviluppatori e stakeholder del dominio. Ciò rende la comunicazione più semplice e fruttuosa, consentendo una rappresentazione più accurata del dominio nel codice.

  1. Modellazione del Dominio

Il DDD enfatizza la creazione di modelli mentali atti a catturare la comprensione del problema. Questi modelli si rivelano uno strumento fondamentale per 

accelerare la definizione di possibili soluzioni e la loro conseguente implementazione.

  1. Aggregati e Consistenza Transazionale

DDD utilizza gli Aggregati per definire unità di consistenza transazionale. Questo approccio aiuta a gestire con precisione le regole di business all’interno del sistema.

  1. Scalabilità e Manutenibilità

Un modello di dominio ben progettato contribuisce alla creazione di un sistema scalabile e manutenibile. La struttura modulare e la chiarezza nel design semplificano l’evoluzione del software nel tempo.

  1. Buone pratiche di Sviluppo

Il DDD favorisce l’adozione di numerose altre buone pratiche di sviluppo, come ad esempio il Behavior-Driven Development (BDD) e lo sviluppo guidato dai test. 

  1. Allineamento con i principi dell’agilità

DDD integra ed esalta le pratiche dell’agilità. La focalizzazione sulla collaborazione, la comunicazione continua e la flessibilità nell’adattare il modello alle esigenze emergenti rende DDD un forte promotore dello sviluppo agile.

  1. Riduzione dei Rischi

Una comprensione approfondita del dominio e la corrispondente modellazione riducono i rischi di implementazioni inadeguate, tardive, fallaci. La flessibilità delle implementazioni contribuisce a evitare costosi refactoring in fasi avanzate dello sviluppo, e consente repentini cambi di rotta quando il business lo richiede.

 

In sintesi, l’adozione del Domain-Driven Design consente la creazione di software robusti, adattabili e orientati ai bisogni di mercato e utilizzatori finali.
Questo si traduce in vantaggio competitivo per il business.

Cosa affronterai

  • Problem space vs Solution Space
  • Pattern strategici: Domini e Sotto-domini, Bounded Context, Ubiquitous Language, Context Mapping
  • Pattern tattici: Entity, Value Objects, Aggregate e AggregateRoot
  • EventStorming: cenni alla modellazione dei domini
  • CQRS: struttura di un sistema basato su comandi ed eventi
  • Event Sourcing: gli eventi di dominio come fonte della verità

Realizzeremo un sistema composto da microservizi in grado di comunicare tra loro attraverso un service bus. Scriveremo insieme gli specification test per testare gli eventi dell’applicazione e di conseguenza garantire il corretto comportamento del nostro dominio. Vedremo come sia possibile gestire i “Long running process” e il pattern Saga. Ci occuperemo infine di versioning degli eventi: vedremo come gestire eventi che mutano nel tempo all’interno della nostra applicazione.
Una più estesa e approfondita trattazione di questi ultimi temi (CQRS, Event Sourcing, Long Running Processes) è affrontata nel corso “Event Sourcing e Testing del Dominio”, naturale completamento di questo percorso.

Il programma

Il corso si svolge online. Sono previste 6 sessioni da 4h, pause comprese.

Modalità di fruizione

I docenti e tutti i partecipanti saranno in video conferenza e avranno a disposizione una serie di strumenti digitali per interagire tra di loro e lavorare hands-on (ad es. Delle board virtuali su Miro).
L’approccio è interattivo: niente lezioni frontali, ma confronto, discussioni e sviluppo collaborativo. Per questo motivo, è richiesto che tutti i partecipanti abbiano la telecamera accesa per tutta la durata del workshop per una più efficace comunicazione.


Sessione 1

Perché DDD

  • Problem space vs Solution space.
  • Dealing with and categorizing complexity
  • Decision Making and Biases (I 5 livelli di ignoranza)

Strategic Patterns

  • Ubiquitous Language
  • Domain Language: Making Implicit Explicit
  • Domain Model Consistency

Sessione 2

Strategic Patterns 

  • Bounded Context
  • Context Mapping
    • Upstream e Downstream
    • Partnership
    • Shared Kernel
    • Customer Supplier
    • Conformist
    • Anti-Corruption Layer
    • Open Host
    • Published Language
    • Separate Ways
    • Big Ball of Mud
  • Exercises

Tactical Patterns Introduction

  • Entity
  • Value Object
  • Aggregate
  • Aggregate Root
  • Th event-sourced Aggregate

Sessione 3

Implementazione ed esercizi sui Tactical Patterns


Sessione 4

Down to the code

  • Hexagonal architecture
  • Monolite modulare
  • Onion architecture

Sessione 5 e 6

Down to the code

  • CQRS pattern
  • Event Sourcing
  • Long running processes

Questi ultimi argomenti sono molto vasti e articolati. Una loro trattazione approfondita è oggetto del corso “Event Sourcing e Testing del Dominio

I tuoi docenti

Alberto Acerbis

Alberto è sviluppatore, architetto e formatore. Lavora principalmente con tecnologie Microsoft, ma ama spaziare in diverse tecnologie. Per lui scrivere software significa risolvere problemi di business e fornire valore al cliente. Trova che i pattern del DDD siano di grande aiuto per raggiungere lo scopo.
Alberto frequenta numerose community, condividendo le sue esperienze. È co-founder della community “DDD-Open” e membro attivo di altre community come la “Blazor Community Italia”. Collabora con Intré e Agile Reloaded.

Alessandro Colla

Come molti della sua generazione, si è avvicinato alla programmazione quando gli regalarono un Commodore64: da lì, il passaggio dal giocare a cercare di fare un gioco fu breve ed iniziò ad appassionarsi ai linguaggi. A 16 anni passò ad un 8086 per poi seguire tutte le evoluzioni hardware, dei sistemi operativi e dei linguaggi di programmazione. Nel corso di ormai trent’anni passati nel settore IT, Alessandro ha sviluppato verticalizzazioni per gestionali, da zero per i più disparati ambiti e aiutato team nella loro formazione. È anche co-autore del libro “Cronache di Domain-Driven Design”, co-founder di “DDD Open” e di “Polenta and Deploy”.

Ho delle domande…posso farle?

I docenti apprezzano le domande!

Durante le giornate ci saranno diversi momenti dedicati alle domande, in modo che ogni partecipante possa chiarire i suoi dubbi e ottenere spunti per le particolari sfide che sta affrontando.

Se hai delle domande sugli argomenti che verranno trattati, dubbi o altre domande che vorresti fare ai docenti prima del corso, ti invitiamo a scorrere la pagina nel prossimo blocco “domande utili” e se non trovi ciò che fa al caso tuo, le puoi anticipare fin da subito compilando questo form.


Domande utili

A chi è rivolto il corso?

Il corso si rivolge a sviluppatori software, team leader, architetti software, engineering managers, CTO e chiunque voglia vedere il Domain Driven Design in azione.

Ci sono prerequisiti in termini di competenze per partecipare?

  • Esperienza nello sviluppo software come sviluppatore.
  • Padronanza di un linguaggio di programmazione orientato agli oggetti e di una libreria di test (ad es. C#, Java, etc.).
  • Conoscenza basilare del Domain Driven Design (vedi letture consigliate).

E in termini tecnici?

Ci sono alcuni prerequisiti per poter lavorare agli esempi di codice.
Serve una installazione funzionante del framework .NET Core (.NET Framework 7.0 o superiore), un IDE per scrivere codice in C# (Visual Studio, JetBrains Rider o VSCode). Useremo inoltre Git e Docker.

Qualche giorno prima del corso riceverete comunque una mail con tutte le istruzioni per arrivare preparati.

Quale linguaggio di programmazione verrà usato per gli esercizi durante il corso?

Gli esempi saranno in .NET e C#. La conoscenza del linguaggio è un vantaggio, ma non è fondamentale per la comprensione dei concetti.

Cosa devo assolutamente avere per poter partecipare a questo corso online?

Se possiedi un computer, una rete stabile (almeno 20 Mbps in download e 10 Mbps in upload), cuffie, microfono e videocamera, allora puoi iscriverti al corso senza problemi. Consigliamo ad ogni partecipante di seguire il corso dalla sua postazione: è preferibile non condividere il computer e la stanza con altre persone e colleghi per una migliore esperienza da remoto.

Cosa sarò in grado di fare a fine corso? Cosa avrò costruito?

Sviluppare software è un’attività sempre più complessa. Le tecnologie da padroneggiare sono sempre di più, e i problemi da risolvere sempre più sfidanti. Un’azienda, un team, uno sviluppatore che non si dota di strumenti efficaci per gestire questa complessità si espone a innumerevoli rischi, in grado di minare la soddisfazione personale e il successo dell’azienda.

Questo corso farà di te un professionista più sicuro e competente nel creare soluzioni software sofisticate. Sarai in grado di applicare i principi del DDD per affrontare le sfide complesse del tuo dominio specifico e costruire soluzioni di alta qualità che si adattano alle esigenze in continua evoluzione del tuo progetto.

Come posso prepararmi al meglio a questo corso?

Il modo migliore per prepararsi è leggere qualche articolo introduttivo al Domain Driven Design, in modo da consentire ai docenti di accelerare l’introduzione dei concetti base e riservare maggiore spazio alle parti pratiche e di confronto. Una base di partenza potrebbe essere la “Domain-Driven Design Reference” di Eric Evans, ideatore di questo approccio.

Come si svolgerà il corso e quanto dura?

Il corso si svolgerà online. Sono previste 6 mezze giornate (sessioni da 4h, pause comprese) distribuite nell’arco di 2 settimane.

È previsto un test finale?

No.

Verrà rilasciata una certificazione?

No, ma riceverete un attestato di partecipazione firmato e brandizzato Agile Reloaded.


Non trovi il corso che fa al caso tuo?
Vuoi partecipare al corso insieme al tuo team?
Vuoi portare il corso in azienda?

Richiedi informazioni