A quale domanda viene data risposta da DDD? [duplicare]

12

Qual è il problema risolto da Domain Driven Design?

Capisco che Programmazione orientata agli oggetti ha portato e visto i problemi che ha affrontato e in che modo, e in quale aspetto / scenario, ha semplificato la vita di uno sviluppatore. Ma finora non sono riuscito a vedere il quadro generale di ciò che DDD ci porta. Di sicuro questo è dovuto al fatto che sto iniziando con DDD e forse è qualcosa che saprò alla fine (dopo aver lavorato con lui per alcuni anni). Ma se no ed è possibile riassumere il quadro generale in alcune frasi per favore condividili con me.

Quello che ho ottenuto finora:

DDD aiuta a definire un linguaggio comune per discutere ad esempio di un progetto software. Per capire cosa sta succedendo in un dominio, ad es. come funziona l'azienda, quali operazioni sono possibili e in quali condizioni. Quali dati devono essere memorizzati e come dovrebbero essere raggruppati.

Questo è il quadro generale? Penso che ci sia dell'altro ma non riesco ancora a vederlo.

Modifica

Esiste una domanda simile Che cos'è lo sviluppo guidato dal dominio in termini pratici? . Tuttavia questa domanda ha un focus diverso quando si richiede che cos'è DDD mentre vorrei imparare a quale problema DDD è la soluzione . Una data risposta è davvero eccellente e include anche le possibili risposte alla mia domanda. Non posso giudicare se questa risposta include la risposta completa alla mia domanda, ma in questo momento la mia intuizione mi dice che non è così.

    
posta Sjoerd222888 14.12.2015 - 18:13
fonte

2 risposte

12

Il Domain Driven Design è fondamentalmente un rimedio alla nostra tendenza a soffiare gli oggetti e le preoccupazioni tecniche e "filosofiche" l'una nell'altra. Anche nei casi in cui abbiamo la netta sensazione che queste due cose siano meglio affrontate come preoccupazioni separate, può essere difficile riuscire a creare coerentemente le divisioni giuste senza una chiara regola.

E così, la regola di base è "creare e mantenere una parte distintamente riconoscibile della tua applicazione (il dominio) in cui contenga i tuoi oggetti e metodi puri riconoscibili dal business, i nomi di cui ogni uomo d'affari dovrebbe riconoscere. "

Si tratta di evitare le situazioni in cui sia le regole aziendali che della tecnologia sono difficili da cambiare perché non sono ben isolate l'una dall'altra.

Nella mia esperienza con le applicazioni web, ho scoperto che quando i principi DDD e DDD non sono esplicitamente rispettati, c'è una tendenza strong a incanalare le regole aziendali direttamente in Codice UI. Quindi, si finisce con più copie delle regole di business (una per ogni pagina), e né quelle di di quell'utente possono essere facilmente modificate.

    
risposta data 14.12.2015 - 19:01
fonte
5

Penso che il DDD abbia a che fare con un concetto un po 'sottotono, che io chiamo "Separazione Problema / Soluzione". Risolve il problema di Riutilizzo dei problemi anziché solo il riutilizzo delle soluzioni.

Per come la vedo io, dovresti modellare gli elementi problematici in un modo che non dipende da come sarebbe risolto. Questa sarebbe la parte "analisi" di OOAD, in cui definisci concettualmente quali sono gli elementi del problema. Nel frattempo, mentre sviluppi ulteriormente la tua soluzione - ovvero progettando una delle possibili soluzioni - aggiungi elementi che riguardano specificamente la quella soluzione . Questa sarebbe la parte "design" dell'applicazione, in cui definisci come devono essere manipolati quegli elementi del problema o come dovrebbero interagire in modo che il problema sia risolto.

Come esempio concreto, sviluppo software medico (acquisizione, elaborazione e visualizzazione di dati biosegnali, soprattutto). La nostra azienda ha una manciata di prodotti software, ognuno dei quali risolve problemi simili in modi leggermente diversi, a seconda delle specialità mediche. Dopo analisi, cioè analisi del problema , abbiamo visto ripetutamente gli stessi concetti ricorrenti. Questi concetti sono stati progettati in oggetti (o interfacce o classi astratte) e inseriti in un assembly chiamato Company.BioSignals.DomainModel . Ora abbiamo una mappatura uno-a-molti tra una parte circoscritta e relativa al problema della base di codice e un insieme di parti relative alla soluzione della base di codice.

    
risposta data 14.12.2015 - 21:11
fonte

Leggi altre domande sui tag