Domain Driven, Proprietà e "Oggetti Anemici"

Leggo stamattina un post di un amico Javista che affronta un problema che anche io ho incontrato nella modellazione di un Domain Model "coerente".

Il problema è sulla definizione delle proprietà pubbliche di un oggetto. Faccio un esempio per inquadarare il problema.

Supponete di avere una classe Ordine e una classe RigaOrdine. Ordine contiene una collezione di RigaOrdine ma siccome Ordine è il "capo" dell'aggregato la collezione di RigaOrdine se ne sta nascosta all'interno di Ordine, il quale ha 2 metodi AddRiga(RigaOrdine r) e RemoveRiga(RigaOrdine r). In questo modo vincolo l'esistenza di un oggetto RigaOrdine al suo padre come avviene nel mondo reale.
Il problema nasce quando voglio visualizzare in una griglia l'elenco delle righe ordine, per poter sfruttare il binding devo rendere pubblica la collezione di RigaOrdine aprendo la possibilità ai programmatori di scrivere Ordine.Righe.Add(rigaOrdine).

Pietro propone la creazione di oggetti DTO che fungono da "vista" sul vero oggetto del Domain Model, ma questo porta inevitabilmente al proliferazione di oggetti "dummy" con tutto ciò che comporta in termini di manutenzione.

 

Print | posted on giovedì 1 febbraio 2007 12.16

Comments on this post

# re: Domain Driven, Proprietà e "Oggetti Anemici"

Requesting Gravatar...
potresti fare una cosa del tipo:

public class Ordine
{
private List<RigaOrdine> righe = new List<RigaOrdine>();
public void AddRiga(RigaOrdine r)
{
r.Ordine = this;
righe.Add(r);
}
public ReadOnlyCollection<RigaOrdine> Righe
{
get
{
return righe.AsReadOnly();
}
}
}

oppure, ancora piu' bello, utilizzare il metodo statico Wintellect.PowerCollections.Algorithms.ReadOnly<RigaOrdine>, che ha il vantaggio di tornarti un'interfaccia (ICollection<RigaOrdine> oppure IList<RigaOrdine>), al posto di una classe ReadOnlyCollection<RigaOrdine>
Left by Adrian Florea on feb 01, 2007 12.46

# re: Domain Driven, Proprietà e "Oggetti Anemici"

Requesting Gravatar...
Mi ricordo già una discussione del genere...
Perchè non ne parliamo sul forum di guisa? :-)
Left by Giancarlo Sudano on feb 01, 2007 2.07

Your comment:

 (will show your gravatar)
 
Please add 4 and 4 and type the answer here: