Sto prendendo in considerazione DDD e come creare una struttura di progetto C # per una WebApp Core .Net. Ho cercato un po 'per il web, ad esempio Come strutturare un design guidato da dominio in un'architettura di Onion? , link e diversi corsi di Pluralsight.
Ciò che mi infastidisce è il fatto che questi esempi di HelloWorld non sembrano funzionare molto bene nella vita reale: Supponiamo di creare la struttura di cipolla propagata di Applicazione, Dominio e Infrastruttura. In tal caso, l'applicazione sarà la parte WebApi, il dominio i servizi di dominio, le entità, gli oggetti valore ecc. E l'infrastruttura l'implementazione delle interfacce definite nell'assembly del dominio.
Fin qui tutto bene, ma con questo approccio, dovrei definire ogni bit del codice di aiuto nel Domain-Layer. Per servizi, gestori, ecc. Potrei definire solo le interfacce e lasciare che l'implementazione si inietti dal livello infrastruttura. Ma non appena ho iniziato a programmare in questo modo, avevo cartelle come Attributi, Gestori (servizi di basso livello per REST, File ecc.) E una tonnellata di altre cose tecniche nel mio livello di dominio. Per motivi di test, ho provato a ripristinare la dipendenza, quindi il dominio ha come obiettivo l'infrastruttura. Ciò consente di spostare tutto il codice di supporto e i gestori di basso livello sull'infrastruttura, ma rende la comunicazione scomoda: poiché le entità e gli oggetti valore sono ancora nel dominio, l'infrastruttura non li conosce più, quindi dovrei mappare a DTO, aggiungendo un altro livello di mappatura solo per questa comunicazione.
Leggendo il libro di Eric Evans, ho preso l'idea che il Domain-Layer dovrebbe essere scritto in un linguaggio onnipresente, essere agnostico tecnico ed essere la piattaforma di comunicazione con gli esperti del dominio. Ma non riesco a trovare una buona soluzione per avere entrambi i mondi migliori. Mi sto perdendo qualcosa di cruciale qui?