DDD: memorizzazione di dati aggiuntivi con il modello

2

Il nostro dominio viene gestito in determinati contesti. Questo contesto è descritto da alcuni valori aggiuntivi, come un fooId - id che non ha significato nel dominio business, ma è più un sapore per l'intera applicazione e moduli.

Ho bisogno di memorizzare questo fooId con entità, come Book . Ma non voglio che Book abbia questo id nella classe, poiché il numero di flag dipende dal contesto. Questi flag sono disponibili nel repository, quindi sono in grado di memorizzarli nel db.

Come modellare questo?

Posso avere una factory per Book che in realtà crei un'implementazione Book con tutti i campi aggiuntivi. Il repository funzionerebbe solo con queste implementazioni. L'utente non è a conoscenza dei campi aggiuntivi. Ma ha sempre bisogno di chiamare la fabbrica se vuole creare l'oggetto.

Come ti senti? Non vedo nessun altro modo per farlo, e ancora per non avere Book a conoscenza di flag aggiuntivi.

I flag aggiuntivi fooId di cui sto parlando potrebbero essere ad es. %codice%. Possiamo dire che il nostro software è suddiviso in moduli, e ogni modulo può creare i suoi artefatti (come i libri) nel proprio gruppo. Tuttavia, il gruppo è "flavor" del repository - i servizi e il modello non dovrebbero essere a conoscenza dei gruppi, poiché possiamo avere un repository monogruppo, in cui tutto è memorizzato in un singolo gruppo.

    
posta lawpert 30.10.2014 - 16:45
fonte

1 risposta

1

Problemi di questo tipo possono essere risolti fornendo una versione grafica del modello (ad esempio, in uno strumento UML CASE), che mostra solo gli attributi del dominio, insieme a un generatore di codice che genera l'implementazione di interfacce di classe, database script ecc.

Il generatore di codice ti fornirà silenziosamente tutti i tuoi "attributi tecnici", quindi a livello di implementazione, sono visibili e disponibili e, sul "livello di esperti di dominio", gli attributi sono invisibili. Inoltre, il tuo generatore di codice può fornire codice diverso e attributi diversi per contesti diversi.

    
risposta data 01.11.2014 - 08:12
fonte