La ragione principale di questi confini è la separazione delle preoccupazioni . Il codice che accede all'archivio dati dovrebbe preoccuparsi solo di accedere all'archivio dati. Non dovrebbe essere responsabile dell'applicazione delle regole sui dati. Inoltre, l'interfaccia utente dovrebbe essere responsabile dell'aggiornamento dei controlli nell'interfaccia utente, ottenere valori dall'input dell'utente e tradurli in qualcosa che il livello di dominio può utilizzare e nient'altro. Dovrebbe chiamare le operazioni fornite dal livello di dominio per eseguire tutte le azioni necessarie (ad esempio, salvare questo file). Un servizio Web chiamato dovrebbe essere responsabile della conversione dal supporto di trasmissione a qualcosa che il livello di dominio può usare e quindi chiamare il livello di dominio (la maggior parte degli strumenti fa molto di questo lavoro per te).
Questa separazione, se implementata correttamente, può offrire la possibilità di modificare parti del codice senza influire sugli altri. Ad esempio, forse l'ordinamento di una raccolta di oggetti restituita deve cambiare. Dato che sai che il livello responsabile della manipolazione dei dati (di solito il livello della logica aziendale) gestisce queste cose, puoi facilmente identificare dove il codice deve essere modificato. Oltre a non dover modificare il modo in cui viene recuperato dall'archivio dati o da qualsiasi applicazione che utilizza il dominio (l'interfaccia utente e il servizio Web dal mio esempio sopra).
L'obiettivo finale è rendere il codice il più semplice possibile da mantenere.
Come nota a margine, alcune cose non possono essere incorporate in un livello specifico del dominio (ad esempio, registrazione, convalida e autorizzazione). Questi elementi sono comunemente indicati come problemi trasversali e in alcuni casi possono essere trattati come un livello indipendente che tutti gli altri livelli possono vedere e utilizzare.
Personalmente penso che l'approccio a più livelli sia obsoleto e che l'approccio al servizio sia migliore. Hai ancora la linea netta disegnata nella sabbia su chi fa cosa, ma non ti obbliga a essere gerarchico. Ad esempio, un servizio di ordini di acquisto, un servizio di fatturazione e un servizio di spedizione, dal punto di vista dell'applicazione, tutti questi servizi rappresentano il tuo dominio e il differimento della responsabilità sopra descritto è ancora valido in questo contesto, è appena stato modificato che il tuo dominio esiste in più punti, utilizzando ulteriormente il concetto di separazione delle preoccupazioni.