Per prima cosa, l'architettura DDD e cipolla sono cose diverse che puoi usare l'una senza l'altra. Uso quasi sempre cipolle, ma quasi mai DDD ... è solo eccessivo per la maggior parte delle cose a mio parere (e l'opinione del suo creatore). Inoltre, ritengo che siano altre tecniche che possono essere utilizzate al posto di DDD, anche in situazioni in cui è utile.
Il nucleo della tua cipolla (non DDD) è il tuo progetto di dominio. Questo contiene oggetti business. Modellano il funzionamento concettuale della tua applicazione, senza riguardo per i dettagli di implementazione come la persistenza o l'interfaccia utente. Non ci sono riferimenti al database, o anche classi che gestiscono il database !
Supponiamo che la tua applicazione sia un'applicazione fiscale proprietaria. Il nucleo della tua cipolla, gli oggetti business, avrebbe classi come: IncomeEntry
, ExpenseEntry
, Building
, Employee
, TaxCalculator
, ect. Si farebbero riferimento l'uno all'altro, ma mai nulla a che fare con l'interfaccia utente o il DB.
Il prossimo livello della cipolla, infrastruttura, avrebbe i tuoi repository da salvare e richiamare. Questo progetto farà riferimento ai tuoi oggetti di dominio. Il tuo IncomeEntryRepository
avrà metodi come GetIncomeEntries
che restituiscono IncomeEntry
oggetti.
Successivamente, hai il tuo progetto UI all'esterno della cipolla. Può utilizzare sia gli oggetti business che i repository per mostrare informazioni utili all'utente.
Tutti sono stati contenti della tua interfaccia utente rapida ed efficiente, ma ora i livelli C vengono da te e ti chiedono di creare un'API per alcune delle filiali. Non vogliono sfruttare la potenza della tua applicazione, ma i codici legali significano che non possono avere accesso ai tuoi dati. Questo è dove il potere della cipolla.
Semplicemente, sul bordo esterno della cipolla, aggiungere un'API Web che consenta alle filiali di inserire i propri dati ed eseguire calcoli fiscali su di essi. Questo web API dovrà solo fare riferimento al dominio del dominio