Presentazione VS Application layer in DDD


9

Ho difficoltà a tracciare una linea chiara tra il livello Presentazione e Applicazione in Domain Driven Design.

Dove dovrebbero andare i controller, le viste, i layout, i file Javascript e CSS?

Si trova nel livello Applicazione o Presentazione?

E se vanno tutti insieme nello stesso livello, cosa contiene l'altro? È vuoto?

Risposte:


7

Solo perché qualcuno ha creato e chiamato "Livello applicazione" e "Livello presentazione" non significa che l'applicazione dovrebbe averli. Dovresti creare livelli DOPO aver creato una notevole quantità di codice che hai raggruppato insieme e vuoi nominare questo gruppo per motivi di comunicazione tra sviluppatori e chiarezza del codice.

Dal punto di DDD. Il livello applicazione è tutto ciò che non è livello dominio. Che include la logica dell'applicazione, i servizi di presentazione e applicazione.


2
Grazie, in effetti mi hai fatto capire che per il mio caso separare Applicazione e Presentazione è inutile. La semplicità prima di tutto!
Matthieu Napoli,

Se DDD ha l'API REST invece dell'interfaccia utente nel livello di presentazione, l'API REST sarebbe un'applicazione o un livello di presentazione. Ora sono confuso, dato che ero sicuro che l'API REST è un livello di presentazione ..
Dario Granich,

8
In realtà, DDD prescrive quattro livelli nel seguente ordine, dall'alto verso il basso: Presentazione, Applicazione, Dominio, Infrastruttura. Pertanto, il livello Applicazione non include "presentazione". Inoltre, è sempre una buona idea decidere sui livelli prima che venga scritta una quantità significativa di codice, poiché non si tratta solo di raggruppare il codice insieme ma anche di vincolare la direzione delle dipendenze in fase di compilazione.
Rogério,

11

C'è una grande differenza tra il livello applicazione e il livello presentazione da un punto di vista DDD.

Sebbene DDD sia incentrato su come modellare il dominio utilizzando i blocchi predefiniti di DDD e concetti come contesti limitati, linguaggio Ubiquitous e così via, è ancora fondamentale identificare e separare chiaramente i vari livelli nella tua app.

L'architettura gioca un ruolo importante nell'implementazione di un'app DDD di successo. Un'architettura famosa che ha guadagnato molto clamore ultimamente è l'architettura a cipolla:

inserisci qui la descrizione dell'immagine

In questa progettazione, il livello UI / Presentation e il livello applicazione sono chiaramente separati. La fusione dei 2 introduce uno stretto accoppiamento tra 2 strati che presentano chiare preoccupazioni e responsabilità separate.

Il livello Presentazione deve contenere solo la logica di presentazione. Evita le UI intelligenti che ne sanno troppo. Questo ospita principalmente i controller e le visualizzazioni di MVC oltre a CSS, JS, modelli, moduli e tutto ciò che riguarda oggetti di risposta e richiesta.

Le azioni eseguite tramite la presentazione vengono delegate al livello applicazione tramite comandi. Il livello dell'applicazione contiene la logica dell'applicazione. Normalmente si associa a un caso d'uso. Contiene COSA il sistema dovrebbe fare per soddisfare un caso d'uso. Un tipico servizio applicativo chiederà a un repository di restituire un aggregato, quindi invocare un'azione su tale aggregato.

Dai un'occhiata al progetto di esempio dell'IDDD di Vaughn Vernon


2
+1. Ecco come ho implementato il mio progetto. Immediatamente, sono stato in grado di ottenere guadagni facendo così. Da quando ho eseguito l'astrazione su un livello applicazione, sono stato in grado di avere più livelli di presentazione. Ad esempio, la nostra API Web e il nostro sito Web consumano entrambi il livello dell'applicazione che ha risparmiato molto tempo e codice duplicato poiché la mia app Web non deve inquadrare la messaggistica da e verso l'API Web e mantiene sincronizzata tutta la logica tra i due.
Sinaestetico il

Dove sono entry pointe composition rootcollocati? Ho sempre pensato che fosse una responsabilità del Applicationlivello. Ma ora sembra che questo sia Presentationlayer.
Denis535,

2

Domain Driven Design non ha nulla a che fare con il livello Presentazione o il livello Applicazione. DDD è una metodologia il cui obiettivo principale è il livello Dominio. Vale a dire, DDD non impone alcun vincolo rispetto a qualsiasi altro livello ad eccezione del livello Dominio e anche la tua domanda potrebbe essere posta nel contesto di qualsiasi altra metodologia.

Detto questo, è molto comune utilizzare un'architettura a quattro livelli per le applicazioni DDD. Ecco un esempio di una di queste applicazioni che mostra i livelli e l'uso previsto: DDDSample Architecture . Pertanto, se si sceglie di utilizzare questa architettura, le viste e i layout andrebbero al livello Interfacce e i controller, se indipendenti dall'interfaccia, andrebbero al livello Applicazione.

Potresti anche scegliere qualsiasi altro tipo di architettura, come ho detto DDD non impone vincoli. Ci sono molti framework MVC là fuori che hanno strutture diverse e tuttavia potrebbero essere utilizzati anche per applicazioni DDD. Quindi, ovviamente, posizioneresti le tue viste e layout di conseguenza.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.