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.