La ragione principale di questi limiti è separazione dei dubbi . Il codice che accede all'archivio dati deve solo preoccuparsi dell'accesso 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, ottenendo i valori dall'input dell'utente e traducendoli in qualcosa che il livello del dominio può utilizzare, e nient'altro. Dovrebbe chiamare le operazioni fornite dal livello del dominio per eseguire tutte le azioni necessarie (ad esempio, salvare questo file). Un servizio web che viene chiamato dovrebbe essere responsabile della conversione dal mezzo di trasmissione a qualcosa che il livello del dominio può usare, e quindi chiamare il livello del dominio (la maggior parte degli strumenti fa un sacco di questo lavoro per te).
Questa separazione, se implementata correttamente, ti può permettere di modificare parti del tuo codice senza influire sugli altri. Ad esempio, forse l'ordinamento di una raccolta restituita di oggetti deve essere modificato. Poiché sai che il livello responsabile della manipolazione dei dati (in genere il livello della logica aziendale) gestisce questa roba, 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 del mio esempio precedente).
L'obiettivo finale è rendere il tuo codice il più facile da mantenere possibile.
Come nota a margine, alcune cose non possono essere incasellate in un livello specifico del dominio (ad esempio registrazione, convalida e autorizzazione). Questi elementi vengono comunemente chiamati preoccupazioni trasversali e in alcuni casi possono essere trattati come un livello che si trova da solo e che tutti gli altri livelli possono vedere e utilizzare.
Personalmente ritengo che l'approccio a strati sia obsoleto e che l'approccio al servizio sia migliore. Hai ancora la linea dura disegnata nella sabbia su chi fa cosa, ma non ti obbliga ad essere gerarchico. Ad esempio, un servizio di ordine di acquisto, un servizio di fatturazione e un servizio di spedizione, dal punto di vista applicativo tutti questi servizi rappresentano il tuo dominio, e il rinvio della responsabilità che ho descritto sopra è ancora valido in questo contesto, è appena stato modificato che il tuo dominio esiste in più punti, utilizzando ulteriormente il concetto di separazione delle preoccupazioni.