Capsule Informatiche di Lello De Luca
← Tutte le Capsule

Bounded Context e Data Ownership: spezzare davvero il database condiviso

DDD e Data Ownership aiutano a separare identità paziente, episodio, letto, ordine e cartella clinica evitando database condivisi e dipendenze SQL tra moduli.

Perché il database condiviso è un problema architetturale

Quando più moduli leggono e scrivono direttamente le stesse tabelle o collection, il database diventa contemporaneamente modello di dominio, API e meccanismo di integrazione. Una modifica allo schema può rompere consumer sconosciuti e nessun team possiede davvero il dato.

Bounded Context

Un Bounded Context è un confine entro cui un modello ha significato coerente e un linguaggio preciso. Non coincide automaticamente con un microservizio. Può iniziare come modulo di un modular monolith e diventare un servizio autonomo quando esistono motivi di ciclo di vita, scalabilità, rischio o organizzazione.

Data Ownership

Ogni concetto deve avere un source of truth dichiarato. Gli altri contesti possono mantenere identificativi, snapshot giustificati o proiezioni, ma non devono modificare direttamente il database del proprietario.

Esempio sanitario

  • Patient Identity/EMPI possiede identità, identificativi, merge e matching.

  • ADT possiede Encounter, Admission, Transfer e Discharge.

  • Bed Management possiede Ward, Room, Bed e Occupancy.

  • Order Management possiede Order, Order Item, workflow e stato dell'ordine.

  • Clinical Record possiede note, valutazioni e documentazione clinica del proprio contesto.

  • Document Management possiede artefatto documentale e metadati di conservazione/recupero.

Database per bounded context non significa una VM per servizio

L'isolamento è prima di tutto logico e di ownership. Più contesti possono condividere lo stesso cluster PostgreSQL, ma con database/schema, ruoli e permessi separati. Order Entry non deve eseguire SELECT sulle tabelle ADT: usa API, eventi o proiezioni autorizzate.

Come condividere informazioni

  • Query immediata → API sincrona del proprietario.

  • Notifica di un fatto → Domain Event.

  • Vista aggregata → BFF/API Composition o Read Model.

  • Replica necessaria per performance → proiezione derivata, con ownership chiaramente distinta dal master.

Criterio per trovare i confini

Cercare invarianti, termini con significato diverso, ritmi di cambiamento, responsabilità organizzative e transazioni che devono restare atomiche. Il numero di controller o collection non è un criterio affidabile per definire un bounded context.