Domanda

Facendo un po 'di lettura intorno al disegno di dominio guidato e sembra che si suppone di accedere a tutte le imprese di un aggregato da attraversamento dalla radice di aggregazione.

Tuttavia, allo stesso tempo, si dovrebbe davvero cercare di incapsulare i dati in modo che le proprietà / campi sono protetti o privato.

Quindi la mia domanda è:? Se i campi sono protetti / privato come si fa per attraversare l'aggregato

Il modo in cui ho configurarlo in questo momento è la seguente: ho marchio tutte le proprietà del mio modello di dominio come interno con le modalità di "impostazione" contrassegnati come protetti. In questo modo, almeno nulla fuori del modello può accedere alle proprietà, ma gli oggetti nel modello può accedere altre proprietà oggetti e ancora consentire solo modificando le proprietà all'interno dell'oggetto stesso.

Anche se ho fatto questo, mi sento ancora come se questo dovrebbe applicarsi solo per le proprietà di altre entità aggregate (voglio dire, "nome" di un cliente sarebbe ancora privato, ma i loro "Ordini" deve essere contrassegnato come interno per consentire l'attraversamento da parte del Cliente -> ordini -.> etc)

Qualcuno ha qualche consiglio su questo?

Modifica

Mi permetta di cercare di dare un esempio più concreto per la domanda: Ho un due oggetti nel mio grafico oggetto: Bookshelf e Libro. Diciamo per il bene di questo esempio che Bookshelf è la radice di aggregazione, e che i libri sono memorizzati su uno scaffale in modo sono solo entità all'interno dell'aggregato (Bookshelf ha una collezione di libri).

Voglio scrivere un metodo per aggiungere un nuovo libro alla libreria. A seguito di DDD best practice, credo che dovrei scrivere un metodo nella classe Bookshelf come AddBook (Libro libro).

Tuttavia, quello che se v'è un requisito aziendale che nessun libro con lo stesso titolo può essere aggiunto alla libreria. Voglio un po 'di logica all'interno del metodo Bookshelf.AddBook per controllare la raccolta di libri per assicurarsi che questo libro non esiste già.

Il problema ora è che io non posso farlo, come ho scritto l'oggetto libro in un modo ben incapsulata e la sua proprietà "Nome" non è accessibile al pubblico.

ho capito che questo è un esempio abbastanza artificiosa, ma spero che illustra meglio il problema. Ho anche ora rendo conto che questo non è solo un problema DDD, ma un OO incapsulamento uno in realtà. Sono sicuro che ci deve essere un modo molto comune e facile per risolvere quello che sto cercando di fare e sto in maniera massiccia overthinking esso.

È stato utile?

Soluzione

Non c'è nulla di male nel mostrare proprietà in caso di storng, composizione simile relazione tra genitori e figli suoi. proprietà secondarie sono esposti al genitore, ma perché la loro forte relazione e interdependenace si doean't rottura incapsulamento.

In altre parole, non c'è nulla di male nel mostrare proprietà nome del libro alla libreria, ma sarebbe sbagliato (in senso di DDD best practice) per esporre il nome di al altri aggregati. Sarebbe anche sbagliato esporre raccolta modificabili di libri. Esporre la raccolta di sola lettura dovrebbe essere fatto con cautela -. Può essere segno di rottura di incapsulamento

La vostra domanda a questo risposta?

Altri suggerimenti

Il Visitor modello è il meccanismo tipico attraversamento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top