Cos'è Domain Driven Design?


198

Qualcuno può spiegare (in termini concisi) che cos'è esattamente il design guidato dal dominio? Vedo il termine parecchio ma davvero non capisco di cosa si tratti o come sia. In che cosa differisce dalla progettazione non guidata dal dominio?

Inoltre, qualcuno può spiegare cos'è un oggetto dominio? In che modo il dominio differisce dagli oggetti normali?




Questo risponde alla tua domanda? Cos'è Domain Driven Design (DDD)?
Satpal,

Risposte:


112

MODIFICARE:

Poiché questo sembra essere il miglior risultato su Google e la mia risposta non lo è, fai riferimento a questa risposta molto migliore:

https://stackoverflow.com/a/1222488/1240557

RISPOSTA VECCHIA (non così completa :))

Per creare un buon software, devi sapere di cosa si tratta. Non è possibile creare un sistema software bancario a meno che non si abbia una buona comprensione di cosa sia il settore bancario, è necessario comprendere il dominio bancario.

Da: Domain Driven Design di Eric Evans.

Questo libro fa un ottimo lavoro nel descrivere DDD.

Registrati per scaricare un riepilogo del libro o scarica direttamente il riepilogo .


Quella versione mini è un riferimento eccellente e lo trovo utile anche con una copia del testo completo a portata di mano. Di solito ci vado prima e poi al testo per maggiori dettagli.
Kyri Sarantakos,

15
Quindi prendo da questa risposta "leggi questo libro" che è impossibile riassumere DDD in pochi paragrafi? Come può una filosofia del design essere così complicata?
Robin Winslow,

Non direi che è impossibile, ma ho pensato che ci fossero posti migliori per leggerlo e il libro di Eric Evans è la migliore fonte per questo, quindi perché duplicarlo qui?
Mikael Östberg,

6
Caro lettore: se tu, come me, sei arrivato qui dal miglior risultato di Google e sei rimasto deluso nel trovare la risposta accettata, quindi in modo deludente (scuse, Mikael) non temere, ci sono spiegazioni più soddisfacenti qui su SO: stackoverflow.com/a/1222488 / 1240557
Kryger,

3
Lì, ho aggiornato la mia risposta con il link. Questa è stata una risposta molto migliore. Grazie!
Mikael Östberg,

41

Domain Driven Design è una metodologia e una prescrizione di processo per lo sviluppo di sistemi complessi il cui focus è la mappatura di attività, attività, eventi e dati all'interno di un dominio problematico nei manufatti tecnologici di un dominio di soluzione.

L'enfasi di Domain Driven Design è comprendere il dominio problematico al fine di creare un modello astratto del dominio problematico che può quindi essere implementato in un particolare insieme di tecnologie. Domain Driven Design come metodologia fornisce linee guida su come questo modello di sviluppo e sviluppo tecnologico può tradursi in un sistema che soddisfa le esigenze delle persone che lo utilizzano, pur essendo solido di fronte al cambiamento nel dominio del problema.

Il lato del processo di Domain Driven Design prevede la collaborazione tra esperti di dominio, persone che conoscono il dominio problematico e esperti di progettazione / architettura, persone che conoscono il dominio della soluzione. L'idea è quella di avere un modello condiviso con un linguaggio condiviso in modo tale che quando le persone di questi due diversi domini con le loro due diverse prospettive discutono della soluzione, stanno effettivamente discutendo una base di conoscenza condivisa con concetti condivisi.

La mancanza di una comprensione condivisa del dominio del problema tra le persone che necessitano di un particolare sistema e le persone che progettano e implementano il sistema sembrano costituire un impedimento fondamentale per progetti di successo. Domain Driven Design è una metodologia per affrontare questo impedimento.

È più che avere un modello a oggetti. L'attenzione si concentra davvero sulla comunicazione condivisa e sul miglioramento della collaborazione in modo da poter scoprire le esigenze effettive all'interno del dominio problematico e creare una soluzione adeguata per soddisfare tali esigenze.

Domain-Driven Design: The Good and The Challenging offre una breve panoramica con questo commento:

DDD aiuta a scoprire l'architettura di alto livello e a informare sui meccanismi e le dinamiche del dominio che il software deve replicare. Concretamente, significa che un'analisi DDD ben eseguita minimizza i malintesi tra esperti di dominio e architetti del software e riduce il numero successivo di costose richieste di modifica. Suddividendo la complessità del dominio in contesti più piccoli, DDD evita di costringere gli architetti di progetto a progettare un modello di oggetto gonfio, che è dove si perde molto tempo a elaborare i dettagli dell'implementazione, in parte perché il numero di entità da affrontare spesso aumenta oltre dimensione delle lavagne bianche della sala conferenze.

Vedi anche questo articolo Domain Driven Design for Services Architecture che fornisce un breve esempio. L'articolo fornisce la seguente descrizione in miniatura di Domain Driven Design.

Domain Driven Design sostiene la modellazione basata sulla realtà aziendale rilevante per i nostri casi d'uso. Poiché ora sta invecchiando e il livello di hype diminuisce, molti di noi dimenticano che l'approccio DDD aiuta davvero a comprendere il problema attuale e progetta software per la comprensione comune della soluzione. Durante la creazione di applicazioni, DDD parla di problemi come domini e sottodomini. Descrive passaggi / aree indipendenti di problemi come contesti limitati, enfatizza un linguaggio comune per parlare di questi problemi e aggiunge molti concetti tecnici, come entità, oggetti valore e regole di aggregazione per supportare l'implementazione.

Martin Fowler ha scritto numerosi articoli in cui viene menzionato Domain Driven Design come metodologia. Ad esempio, questo articolo, BoundedContext , offre una panoramica del concetto di contesto limitato di Domain Driven Development.

In quei giorni più giovani ci era stato consigliato di costruire un modello unificato dell'intera azienda, ma DDD riconosce che abbiamo appreso che "l'unificazione totale del modello di dominio per un sistema di grandi dimensioni non sarà fattibile o conveniente" 1 . Quindi, invece, DDD divide un grande sistema in contesti limitati, ognuno dei quali può avere un modello unificato, essenzialmente un modo di strutturare MultipleCanonicalModels.


20

Puoi SOLO comprendere la progettazione guidata dal dominio comprendendo innanzitutto quali sono i seguenti:

Che cos'è un dominio?

Il campo per cui è stato creato un sistema. Gestione dell'aeroporto, vendite assicurative, caffetterie, volo orbitale, lo chiami.

Non è insolito che un'applicazione si estenda su più domini diversi. Ad esempio, un sistema di vendita al dettaglio online potrebbe funzionare nei domini di spedizione (selezionando modalità appropriate di consegna, a seconda degli articoli e della destinazione), prezzi (comprese promozioni e prezzi specifici dell'utente per, diciamo, posizione) e raccomandazioni (calcolo relativo prodotti per cronologia acquisti).

Cos'è un modello?

"Un'utile approssimazione al problema in questione." - Gerry Sussman

Una classe Employee non è un vero dipendente. Modella un vero impiegato. Sappiamo che il modello non cattura tutto sui dipendenti reali, e non è questo il punto. Ha solo lo scopo di catturare ciò che ci interessa per il contesto attuale.

Domini diversi potrebbero essere interessati a modi diversi di modellare la stessa cosa. Ad esempio, il reparto salari e il reparto risorse umane possono modellare i dipendenti in diversi modi.

Che cos'è un modello di dominio?

Un modello per un dominio.

Cos'è il Domain-Driven Design (DDD)?

È un approccio di sviluppo che apprezza profondamente il modello di dominio e lo collega all'implementazione. DDD è stato coniato e inizialmente sviluppato da Eric Evans.

Abbattuto da qui


12

Ecco un altro buon articolo che puoi consultare su Domain Driven Design . se la tua candidatura è qualcosa di grave rispetto all'incarico universitario. La premessa di base è strutturare tutto intorno alle entità e avere un forte modello di dominio. Distingue tra servizi che forniscono elementi relativi all'infrastruttura (come l'invio di e-mail, dati persistenti) e servizi che svolgono effettivamente attività che rappresentano i requisiti aziendali fondamentali.

Spero che aiuti.


4

Come in TDD e BDD, il team si concentra maggiormente sui test e sul comportamento del sistema rispetto all'implementazione del codice.

Allo stesso modo quando analista di sistema, proprietario del prodotto, team di sviluppo e ofcourse il codice - entità / classi, variabili, funzioni, processi di interfaccia utente comunicano usando la stessa lingua, si chiama Domain Driven Design

DDD è un processo mentale. Quando si modella un progetto di software, è necessario mantenere il dominio / processo aziendale al centro dell'attenzione piuttosto che strutture di dati, flussi di dati, tecnologia, dipendenze interne ed esterne.

Esistono molti approcci per modellare il systerm usando DDD

  • sourcing di eventi (utilizzando gli eventi come un'unica fonte di verità)
  • database relazionali
  • database di grafi
  • usando linguaggi funzionali

Oggetto Dominio:

In parole molto ingenue, un oggetto che

  • ha un nome basato sul processo / flusso aziendale
  • ha il controllo completo sul suo stato interno, cioè espone metodi per manipolare lo stato.
  • soddisfare sempre tutte le invarianti / regole aziendali nel contesto del suo utilizzo.
  • segue il principio della responsabilità unica

TDD - Test Driven Development
Nitin babariya

BDD - Sviluppo guidato dal comportamento
Nitin babariya

DDD - Domain Driven Development
Nitin babariya

DDD -> Domain Driven Design ~ Development ~
psaxton,

4

DDD (domain driven design) è un concetto utile per l'analisi dei requisiti di un progetto e la gestione della complessità di questi requisiti. Prima che le persone stessero analizzando questi requisiti considerando le relazioni tra classi e tabelle e in effetti il ​​loro design era basato su tabelle di database le relazioni non sono vecchie ma presentano alcuni problemi:

  • Nei grandi progetti con requisiti complessi non è utile, sebbene si tratti di un ottimo modo di progettare piccoli progetti.

  • quando non hai a che fare con persone tecniche che non hanno, non hanno un concetto tecnico, questo conflitto può causare enormi problemi nel nostro progetto.

Quindi DDD gestisce il primo problema considerando il progetto principale come un Dominio e suddividendo ogni parte di questo progetto in piccoli pezzi che siamo famosi in Bounded Context e ognuno di essi non ha alcuna influenza su altri pezzi. E il secondo problema è stato risolto con un linguaggio onnipresente che è un linguaggio comune tra i membri del team tecnico e i proprietari dei prodotti che non sono tecnici ma hanno una conoscenza sufficiente delle loro esigenze

Generalmente la semplice definizione di Domain è il progetto principale che fa soldi per i proprietari e gli altri team.


1

Credo che il seguente pdf ti darà il quadro più ampio. Domain Driven Design di Eric Evans

NOTA: pensa a un progetto su cui puoi lavorare, applica le piccole cose che hai capito e vedi le migliori pratiche. Ti aiuterà a far crescere le tue capacità anche nell'approccio alla progettazione dell'architettura di micro servizi.


0

Non voglio ripetere le risposte degli altri, quindi, in breve, spiego alcuni malintesi comuni

  • Risorsa pratica: MOTIVI, PRINCIPI E PRATICHE DEL DESIGN A DOMINIO di Scott Millett
  • È una metodologia per sistemi aziendali complessi. Prende tutte le questioni tecniche quando si comunica con esperti di business
  • Fornisce una conoscenza approfondita del business (modello semplificato e distillato) nell'intero team di sviluppo.
  • mantiene il modello di business in sincronia con il modello di codice utilizzando un linguaggio onnipresente (il linguaggio compreso da tutto il team di sviluppo, esperti di business, analisti aziendali, ...), che viene utilizzato per la comunicazione all'interno del team di sviluppo o sviluppatore con altri team
  • Non ha nulla a che fare con la gestione dei progetti . Sebbene possa essere perfettamente utilizzato nei metodi di gestione dei progetti come Agile.
  • Dovresti evitare di usarlo in tutto il tuo progetto

    DDD sottolinea la necessità di concentrare maggiormente gli sforzi sul sottodominio principale. Il sottodominio principale è l'area del tuo prodotto che farà la differenza tra il successo e il fallimento. È il punto di vendita unico del prodotto, il motivo per cui viene costruito piuttosto che acquistato.

    Fondamentalmente, è perché ci vuole troppo tempo e fatica. Quindi, si suggerisce di suddividere l'intero dominio in sottodominio e applicarlo solo in quelli con un alto valore commerciale. (ad esempio non in un sottodominio generico come e-mail, ...)

  • Non è una programmazione orientata agli oggetti. Si tratta principalmente di un approccio di risoluzione dei problemi e (a volte ) non è necessario utilizzare modelli OO (come Gang of Four) nei modelli di dominio. Semplicemente perché non può essere compreso dagli esperti di business (non sanno molto di Factory, Decorator, ...). Esistono anche alcuni schemi in DDD (come The Transaction Script, Table Module) che non sono al 100% in linea con i concetti di OO.

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.