In Domain-Driven Design l'applicazione è divisa, come ho capito, in quattro livelli:
- Presentation Layer
- Livello applicazione
- Domain Layer
- Livello infrastruttura
Lo capisco bene, ad esempio, quando sviluppi applicazioni desktop con, ad esempio, WPF su Windows.
Ora, c'è un altro tipo di applicazione che personalmente trovo molto importante oggi. Non so se c'è ancora un termine tecnico per questo tipo di applicazione (probabilmente c'è ma non l'ho ancora trovato), ma lo descriverò.
Abbiamo un server che ospita un'applicazione N-tier con un'API Web RESTful in cui i clienti possono effettuare richieste. Gli altri livelli sono per l'elaborazione in background e la comunicazione con i dispositivi, l'invio di notifiche e così via. Questo tipo di architettura è simile a Microsoft Azure Cloud Services, ad esempio, dove possiamo ospitare più ruoli Web (l'API Web, ad esempio) e più ruoli di lavoro (che eseguono l'elaborazione in background).
Ora non riesco a vedere come posso metterlo in relazione con il tipo di divisione che DDD fa con un'applicazione.
Il livello dominio è ovviamente sul server e le richieste all'API e l'elaborazione in background hanno effetti collaterali sul modello di dominio. Il livello dell'infrastruttura si trova anche sul server.
A mio parere, il livello dell'applicazione è l'intera applicazione N-tier (nel caso Azure, composto da tutti i ruoli Web e di lavoro).
Ma alla fine, non c'è presentazione. Questa cosa è un'API, è costruita per far fronte a tonnellate di dispositivi. Browser Web, smartphone, tablet e così via.
Sto cercando di trarre vantaggio da DDD su questo tipo di applicazione, ma non riesco a vedere come entrambi si riferiscono. In che modo si relaziona con questo tipo di applicazione e DDD e in che modo si può beneficiare del DDD in questi scenari?