Dove trovo alcuni buoni esempi per DDD? [chiuso]


390

Sto imparando su Domain Driven Design, tuttavia ci sono alcuni problemi pratici che mi confondono e che penso che vedere alcuni buoni esempi potrebbe chiarire.

Qualcuno sa di alcuni esempi di codici funzionanti che fanno un buon lavoro di modellazione di concetti DDD di base?

Particolarmente interessato a

  • Un modello di dominio illustrativo
  • repository
  • Uso di servizi di dominio / applicazioni
  • Oggetti valore
  • Radici aggregate

42
I dibattiti IHMO aiuteranno molto. A volte più di una semplice domanda. Ad esempio, potremmo cambiarlo in una domanda: "Dove trovo alcuni buoni esempi per DDD?" e funziona con il formato Domande e risposte.
Gizzmo,

1
ho trovato molto istruttivo l'esempio del "progetto di gestione agile" del libro di Vaughn Vernon. illustra l'implementazione pratica dei blocchi costitutivi che elenchi, oltre a gestire diversi contesti limitati, puoi trovare il codice qui: github.com/VaughnVernon/IDDD_Samples
Mehdi.

1
Vorrei raccomandare questo esempio: github.com/vkhorikov/DddInAction
Vladimir

1

Risposte:


199

La difficoltà con i campioni DDD è che spesso sono molto specifici del dominio e l'implementazione tecnica del sistema risultante non mostra sempre le decisioni di progettazione e le transizioni che sono state prese nel modellare il dominio, che è davvero al centro del DDD. DDD riguarda molto più il processo che il codice. (come alcuni dicono, il miglior esempio di DDD è il libro stesso!)

Detto questo, un'app di esempio ben commentata dovrebbe almeno rivelare alcune di queste decisioni e darti qualche direzione in termini di abbinamento del tuo modello di dominio con i modelli tecnici utilizzati per implementarlo.

Non hai specificato quale lingua stai usando, ma te ne darò alcune in alcune lingue diverse:

DDDSample - un esempio Java che riflette gli esempi di cui parla Eric Evans suo libro . Questo è ben commentato e mostra una serie di diversi metodi per risolvere vari problemi con contesti limitati separati (cioè il livello di presentazione). Si sta lavorando attivamente, quindi controllalo regolarmente per gli aggiornamenti.

dddps - App C # di esempio di Tim McCarthy per il suo libro, .NET Domain-Driven Design with C #

Architettura S # arp - un esempio pragmatico di C #, non come un approccio "puro" al DDD forse a causa della sua mancanza di un reale problema di dominio, ma comunque di un approccio pulito e gradevole.

Con tutte queste app di esempio, è probabilmente meglio controllare le ultime versioni di trunk da SVN / qualunque cosa per avere davvero un'idea del pensiero e dei modelli tecnologici in quanto dovrebbero essere aggiornati regolarmente.


2
Come menzionato @Mehdi nel commento della domanda originale, dovresti aggiungere il meraviglioso esempio di Vaughn Vernon. È la migliore implementazione del modello DDD finora che abbia mai visto: github.com/VaughnVernon/IDDD_Samples
Sylvain Lecoy

So che questo è vecchio, ma l'esempio di dddpssembra essere completamente anemico e in realtà contrario a OOP. Nessuno degli oggetti di dominio ha alcun comportamento e le classi del livello di servizio sono sostanzialmente una delega 1: 1 ai repository. Non sono sicuro se questo dovrebbe essere considerato un "buon" esempio di DDD? Sto ancora imparando me stesso, ma i campioni in S # arp Architecture sembrano essere un esempio migliore per coloro che imparano il DDD in quanto comprendono sia lo stato che il comportamento, il che è un buon design OOP.
David Anderson,

Ora dovresti aggiungere l'eccellente campione di Vaugnh Vernon, autore di Implementing Domain Driven Design (IDDD): github.com/VaughnVernon/IDDD_Samples
Sylvain Lecoy



11

Dai un'occhiata a Project Silk . Non solo dimostra DDD, ma altri modelli all'avanguardia. Questa è una risorsa eccellente per qualsiasi sviluppatore web. Una panoramica completa del progetto è disponibile su MSDN .


Codice sorgente non più disponibile :(
Dherik



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.