DDD - mappa o oggetto [chiuso]

-3

Che cosa è corretto da DDD - dovrei creare una mappa di due oggetti, ad esempio Map o dovrei usare un oggetto più significativo che conterrà questa coppia MoreMeaningfullName {Obj1, Obj2}?

Se si utilizza il primo approccio, non creo classi non necessarie, ma nel secondo approccio ho un oggetto significativo (in una certa misura).

    
posta Marko Kraljevic 29.04.2015 - 15:36
fonte

1 risposta

1

Prima di tutto vorrei obiettare "correctness by DDD". Domain Driven Design si basa sulla costruzione di un modello di dominio e sull'esposizione nel tuo progetto utilizzando la programmazione orientata agli oggetti. Non è un insieme di regole rigide, piuttosto un elenco di linee guida e schemi.

Suppongo che entrambi i tipi ( Obj1 e Obj2 ) memorizzati nella mappa siano significativi per il dominio. Altrimenti questa mappa è fuori dall'ambito del DDD.

L'esistenza della mappa di Obj1 in Obj2 suggerisce che esiste una relazione uno-a-molti tra Obj1 e Obj2 . Quindi la prima domanda che dovresti porci è se questa relazione è significativa per il tuo dominio. O forse questo è solo un dettaglio tecnico utile per alcuni calcoli.

Nel primo caso DDD suggerisce che dovrebbe considerare rendere esplicita questa relazione. Troppe relazioni nel tuo modello lo rendono troppo complesso. Pertanto, Evans in DDD book suggerisce:

  • imponendo la direzione trasversale
  • aggiunta del qualificatore per ridurre la molteplicità
  • limitando le associazioni solo a quelle veramente essenziali

Quindi, se si decide di inserire la relazione nel modello, esistono diversi modi per rendere esplicita la relazione, come suggerito dai principi OOP. La relazione uno-a-molti potrebbe essere rappresentata come attributo in Obj2 (per direzione trasversale Obj1 <-- Obj2 o raccolta di oggetti di Obj2 in Obj1 (per Obj1 --> Obj2 ). È inoltre possibile introdurre qualche classe che rappresenta l'associazione, che è particolarmente utile per le relazioni molti-a-molti.

Ovviamente se la mappa ha una propria identità o ciclo di vita, cioè soddisfa i requisiti per Entità , allora si consiglia di modellarla come classe separata. Posso anche immaginare una mappa modellata come Oggetto valore , ma vedi la mia osservazione qui sotto.

Anche se la relazione non è significativa o non è essenziale per il tuo dominio, i principi di progettazione di base si applicano ancora al tuo progetto ( in base alla priorità):

  1. Supera tutti i test.
  2. Esprimi ogni idea che dobbiamo esprimere.
  3. Non contiene duplicazioni.
  4. Ridotto al minimo il numero di classi, metodi e altre parti mobili.

Quindi, se hai intenzione di duplicare alcune operazioni sulla mappa in più punti, crea una classe. Se la mappa ha un significato più profondo, usa anche una classe separata. In caso contrario, probabilmente è meglio lasciarlo come una mappa pura per evitare di avere troppe classi.

    
risposta data 02.05.2015 - 12:20
fonte

Leggi altre domande sui tag