Skip to main content

Context System

Panoramica

Il Context System è un meccanismo architetturale che permette all'applicazione di mantenere stati e configurazioni tra moduli diversi, garantendo la separazione e l'isolamento dei moduli stessi.

Obiettivo Principale

Il sistema è progettato per:

  • Mantenere la separazione tra moduli
  • Permettere al Core Module di orchestrare i moduli "satellite"
  • Gestire layout e payload in modo centralizzato
  • Evitare dipendenze dirette tra moduli

Architettura

Componenti Principali

  1. Layout: Definisce la struttura UI da renderizzare nel frontend
  2. Payload: Contiene i dati di stato da passare tra moduli

Layout

Il Layout definisce la struttura dell'interfaccia utente che deve essere renderizzata nel frontend. Ogni layout contiene informazioni su come organizzare visivamente i componenti dell'applicazione, come sidebar, header, breadcrumb e altri elementi di navigazione.

Tipi di Layout

Il sistema supporta diversi tipi di layout definiti dall'enum ContextLayoutTypeEnum:

  • Default: Layout completo con sidebar e header
  • Print: Layout ottimizzato per la stampa
  • Auth: Layout per le pagine di autenticazione

Nota: I tipi di layout potrebbero aumentare in futuro per supportare nuove esigenze dell'applicazione.

Payload

Il Payload rappresenta lo stato condiviso tra moduli diversi dell'applicazione. Contiene i dati necessari per il funzionamento dei moduli "satellite" che non hanno accesso diretto al contesto esterno.

Utilizzo come Stato Inter-Modulo

Il payload viene utilizzato dal Core Module per preparare e passare i dati ai moduli satellite. Essendo ogni modulo separato e isolato, i moduli stessi non sono e non devono essere capaci di conoscere il contesto fuori di esso. Il Core Module si occupa di orchestrare il tutto preparando il payload appropriato per ogni modulo.

Ad esempio, quando un modulo di fatturazione ha bisogno di dati del cliente o informazioni specifiche dell'invoice, il Core Module preparerà un payload contenente questi dati e lo passerà attraverso il Context System. Il modulo di fatturazione potrà così accedere ai dati necessari senza conoscere la struttura complessiva dell'applicazione.

Requisito del Payload

Il payload del context dev'essere necessariamente un oggetto figlio di Spatie\LaravelData\Data. Questo garantisce la consistenza dei dati e permette al sistema di gestire correttamente la serializzazione e deserializzazione del payload.