Corso di formazione Architettura e Progettazione del software

Il corso ha la finalità di preparare la figura professionale del software architect che è colui che si occupa della progettazione ad alto livello di un applicativo software.

OBIETTIVO DEL CORSO
Il corso ha la finalità di preparare la figura professionale del software architect che è colui che si occupa della progettazione ad alto livello di un applicativo software, definendone i vari componenti e come questi si relazionano e interagiscono logicamente tra di loro.

Il corso prevede l’apprendimento di diverse metodologie di progettazione del software, che hanno una ricaduta diretta sulla sua modalità di sviluppo, quali:
– Object Oriented: è ormai un fondamento della programmazione che consiste nel definire delle classi con determinati attributi e metodi di impiego di cui gli oggetti software sono delle istanze che operativamente elaborano i dati scambiandosi messaggi tra di loro.
– Domain Design Driven: è un approccio alla realizzazione del software in un contesto complesso che prevede il riferimento a un modello spesso in continua evoluzione, e perciò incentrato sulla scalabilità.
– Multi-tier o N-Tier: è un’architettura del software che prevede la distribuzione delle funzioni su più livelli comunicanti tra di loro, sebbene spesso funzionanti all’interno dello stesso sistema: tipicamente il database, l’elaborazione dei dati e la loro presentazione.
– Client / Server: è il caso più semplice di architettura a software a livelli, con due soli strati.
– Event Driven: è un modello di programmazione in cui il flusso di esecuzione del programma è determinato non a priori ma in base a degli eventi esterni.
– Service Oriented: è un modello di architettura del software che prevede una serie di servizi che comunicano tra di loro.
– Microservizi: è un sistema di progettazione e sviluppo del software legato all’avvento del cloud computing e si basa sull’idea che ogni singolo servizio è svolto da un componente software che gira su un processo autonomo e indipendente che comunica con gli altri tramite API.
– Design Pattern: si tratta di soluzioni progettuali generali a problemi ricorrenti. In particolare possono riguardare le relazioni tra classi o oggetti, oppure a livello più alto, posso descrivere un pattern adottato come schema generale dall’intero progetto software.

PREREQUISITI: conoscenza dei principi di programmazione orientata agli oggetti ed esperienza di sviluppo di sistemi informatici (in qualsiasi ambito).

PROGRAMMA DEL CORSO

Introduzione ai microservizi

  • Definizione e caratteristiche dei microservizi
  • Vantaggi e sfide dell’adozione dei microservizi
  • Monoliti vs Microservizi

Pattern architetturali dei microservizi

  • Design dei microservizi: Bounded Contexts e componentizzazione
  • Pattern comuni: API Gateway, Service Registry, Service Mesh
  • Comunicazione tra servizi: sincrona (REST, gRPC) vs asincrona (messaggistica)

Domain-Driven Design (DDD)

  • Concetti fondamentali del DDD
  • Bounded Contexts e Ubiquitous Language
  • Implementazione del DDD nei microservizi

Scomposizione di un monolite

  • Identificazione dei Bounded Contexts
  • Tecniche di decomposizione
  • Strumenti e strategie per la scomposizione
  • Migrazione graduale e gestione del rischio

Command Query Responsibility Segregation (CQRS)

  • Concetti e principi di CQRS
  • Vantaggi e svantaggi di CQRS
  • Implementazione di CQRS nei microservizi

Event Storming

  • Introduzione all’Event Storming
  • Tecniche e pratiche di Event Storming
  • Utilizzo dell’Event Storming per modellare i microservizi

Event Sourcing

  • Concetti di Event Sourcing
  • Vantaggi e sfide dell’Event Sourcing
  • Implementazione di Event Sourcing nei microservizi

Transazioni distribuite e saga

  • Concetti di transazioni distribuite
  • Pattern di coordinamento: 2PC (Two-Phase Commit) vs Sagas
  • Implementazione delle saga per gestire la consistenza
  • Compensazioni e gestione degli errori nelle transazioni distribuite

Pattern di resilienza

  • Circuit Breaker
  • Retry e Timeout
  • Bulkhead e Throttling
  • Implementazione della resilienza nei microservizi

Osservabilità e monitoraggio

  • Logging centralizzato
  • Tracciamento distribuito
  • Monitoraggio e alerting
Architettura e progettazione del software
Senior Software Architect

Il corso ha una durata di 3 giorni.

 

Questo corso viene erogato solo in modalità dedicata: per questa tipologia, la quotazione è a giornata (su richiesta) e gli argomenti possono essere personalizzati in base alle proprie necessità formative.

AGENDA
    1. Introduzione ai microservizi
    2. Pattern architetturali dei microservizi
    3. Domain-Driven Design (DDD)
    4. Scomposizione di un monolite
    5. Command Query Responsibility Segregation (CQRS)
    6. Event Storming
    7. Event Sourcing
    8. Transazioni distribuite e saga
    9. Pattern di resilienza
    10. Osservabilità e monitoraggio