In Domain-Driven Design, come fai a sapere quando un'applicazione è complessa o solo CRUD?

3

Come puoi sapere se qualcosa è " soluzione CRUD pura " ( " just CRUD ")? Sembra che la complessità sia una cosa difficile da definire per i vari sostenitori del DDD. Tutti dicono che se è "solo CRUD" non hai bisogno di DDD. Cosa significa "solo CRUD"? Ogni applicazione che ho fatto ha operazioni CRUD da qualche parte.

Mi rendo conto che ci sono diversi tipi di pattern all'interno del DDD e molto è un mindset (vocabolario comune), poiché devi conoscere il dominio a prescindere, ma se una società sta per investire in un Business Analyst e in tutte le nove yard , Mi piacerebbe sapere quando questo è eccessivo. "Just CRUD" è piuttosto vago.

Ho visto questo, Domain Driven Design è utile / produttivo per domini non così complessi?

In là "Se non c'è molto comportamento, vale a dire, per lo più si memorizzano i dati e non si agisce su quei dati, potrebbe esserci molto meno valore nel costruire quel livello di dominio." Questo è "solo CRUD", ma non ho mai visto un sistema che non "agisca anche su quei dati".

Per esempio, supponiamo che qualcuno stia costruendo un'applicazione ospedaliera, molte cose lì, essenzialmente una piccola città. È complesso, ma non so perché, oltre all'enorme quantità di cose che devono essere spiegate, ma alla fine è CRUD.

Intuitivamente, conosco un complesso di applicazioni ospedaliere, ma non so perché sia complesso nel senso che DDD significa complessità.

Che cos'è un esempio non complesso?

Modifica: Scusa, ho dimenticato di dire che so cosa significa CRUD.

    
posta johnny 08.07.2017 - 00:05
fonte

3 risposte

4

What does "just CRUD" mean?

Solo CRUD significa che la tua applicazione non ha alcuna autorità propria; che sta semplicemente raccogliendo e ripetendo le informazioni che vi sono passate. Questo è tipico di un database o di un giornale , in cui l'app viene utilizzata come meccanismo per archiviare e servire i dati.

This is "just CRUD," but I've never seen a system that didn't "acting on that data" either.

Sì, normalmente c'è qualche componente che sta semplicemente memorizzando / recuperando dati. La vera domanda è: c'è qualcosa di altro , di fronte all'archivio dati, che sta prendendo decisioni autorevoli su ciò che viene memorizzato e cosa no?

Quel qualcosa sarà di solito un modello di dominio; che ha al suo interno le regole di business che determinano ciò che dovrebbe essere memorizzato.

Questo intervento da Greg Young nel 2012 potrebbe essere d'aiuto.

What is a non-complex example?

Il mio attuale esempio di go-to è determinare se una banca può addebitare o meno una commissione in ritardo. Lo fa esaminando un modello dell'attività dell'account (depositi e prelievi, modifiche nello stato del cliente preferito e così via), applicando la logica di dominio e scrivendo un messaggio che indica quali tariffe possono essere addebitate.

    
risposta data 08.07.2017 - 04:07
fonte
3

CRUD è l'acronimo di Crea Elimina aggiornamento di lettura.

Quindi un'applicazione che offre solo quattro metodi per creare una risorsa, leggerla, aggiornarla ed eliminarla con il suo id è un'applicazione CRUD. Non contiene alcuna logica di dominio tranne forse qualche convalida che l'entità salvata sia valida. Ma tutta la logica interessante vive al di fuori, nei chiamanti di questa applicazione e un'applicazione CRUD funge solo da archivio dati.

Spesso si dice anche che un'applicazione come quella implementa un modello di dominio anemico.

Un esempio di semplice applicazione CRUD è quando si desidera archiviare e recuperare alcuni dati ma si hanno alcune restrizioni sui dati che non possono essere soddisfatte direttamente da un database esterno o da un archivio di valori chiave. È quindi possibile creare una semplice applicazione CRUD che è fondamentalmente un involucro attorno alla soluzione di archiviazione scelta, ma aggiunge i requisiti aggiuntivi che l'archivio dati non può soddisfare da solo.

    
risposta data 08.07.2017 - 14:48
fonte
1

Forse un euristico per un'applicazione che non è "solo CRUD" è che gli interessi di un utente dell'applicazione sono spesso in conflitto con gli interessi dello sponsor dell'applicazione.

Quindi è possibile che sia stata creata un'applicazione "pura e semplice" per aiutare qualcuno a svolgere il proprio compito di registrazione di alcune informazioni. L'utente desidera registrare le informazioni con precisione e lo sponsor dell'applicazione desidera aiutarlo. Non c'è conflitto.

Ma con un gioco, un singolo utente potrebbe voler vincere facilmente, mentre lo sponsor dell'applicazione potrebbe volere che il gioco sia conosciuto come stimolante per attirare più giocatori e impedire facili vittorie. O in un sistema di e-commerce, ovviamente, una classe di utenti vorrebbe che tutto avesse uno sconto del 100%. Lo sponsor dell'applicazione probabilmente non lo vorrebbe.

    
risposta data 12.08.2017 - 19:48
fonte

Leggi altre domande sui tag