 |
AppletTalk.com Java discussions newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Casper Guest
|
Posted: Tue May 15, 2007 7:17 pm Post subject: Object Design: relazioni padre-figlio |
|
|
ciao,
ci sono dei pattern o comunque pareri riguardo l'uso delle relazioni
padre-figlio ?
Facendo un caso in cui un oggetto Padre ha dentro di se una Lista di
oggetti Figlio.
E' corretto inserire anche dentro il Figlio una variabile di tipo
Padre per poter essere in grado di ottenere l'oggetto Padre?
Vedo la cosa come un pò rischiosa/debole dal punto di vista della
gestione... ci sono dei pattern che voi sappiate già consolidati ?
grazie |
|
| Back to top |
|
 |
pole Guest
|
Posted: Tue May 15, 2007 7:27 pm Post subject: Re: Object Design: relazioni padre-figlio |
|
|
Casper wrote:
| Quote: | ciao,
ci sono dei pattern o comunque pareri riguardo l'uso delle relazioni
padre-figlio ?
|
Il composite credo sia un classico.
http://www.ugolandini.net/CompositePattern.html
| Quote: | E' corretto inserire anche dentro il Figlio una variabile di tipo
Padre per poter essere in grado di ottenere l'oggetto Padre?
|
Spesso è una cosa utile.
| Quote: | Vedo la cosa come un pò rischiosa/debole dal punto di vista della
gestione... ci sono dei pattern che voi sappiate già consolidati ?
|
Se ti riferisci ad eventuali problemi di riferimento (es. tutti i figli
devono puntare allo stesso padre etc.), una buona prassi è fare in modo
che il parent sia gestito automaticamente nelle operazioni di add e remove.
pole
--
ammentos - a lightweight persistence framework for JDK5
http://ammentos.biobytes.it
Flash tutorial: http://ammentos.biobytes.it/quickstart/quickstart.html |
|
| Back to top |
|
 |
Casper Guest
|
Posted: Thu May 17, 2007 6:07 pm Post subject: Re: Object Design: relazioni padre-figlio |
|
|
| Quote: | Se ti riferisci ad eventuali problemi di riferimento (es. tutti i figli
devono puntare allo stesso padre etc.), una buona prassi è fare in modo
che il parent sia gestito automaticamente nelle operazioni di add e remove.
|
si esattamente.
Mi si poneva però il problema di eventuali inconsistenze quando gli
oggetti dipendenti fossero inseriti senza fare un controllo.
Faccio un esempio:
class Padre {
List<Figlio> figli;
void setFigli(...) {}
void addFiglio(...) {}
}
class Figlio {
Padre padre;
}
In questo caso, se aggiungo un figlio al padre col metodo addFiglio,
potrei in questo metodo settare il padre dentro il figlio.
Ma se uso il metodo setFigli, che è un setter del bean.... mi
ritroverei a dover fare questo controllo per ogni elemento della
Lista?
Oppure: se creo un figlio, e gli setto dentro un padre, dentro questo
padre a sua volta devo settargli la lista con questo figlio stesso?
Spero di essermi spiegato ci possono essere problematiche di questo
tipo?
thx! |
|
| Back to top |
|
 |
pole Guest
|
Posted: Thu May 17, 2007 6:31 pm Post subject: Re: Object Design: relazioni padre-figlio |
|
|
Casper wrote:
| Quote: | Oppure: se creo un figlio, e gli setto dentro un padre, dentro questo
padre a sua volta devo settargli la lista con questo figlio stesso?
Spero di essermi spiegato ci possono essere problematiche di questo
tipo?
|
L'importante è che Padre gestisca correttamente le istanze di Figlio.
Il problema principale sono le incoerenze che potresti creare nel caso
in cui imposti come figlio F di un oggetto Padre B un'istanza che già
aveva un padre A: se non stai attento puoi trovarti nella situazione che
getFigli() di A ti dia F, ma F abbia come padre B.
La soluzione dipende dal caso. Alcune possibilità:
1) Padre lancia un'eccezione se provi ad impostargli un Figlio di un
altro padre; soluzione molto sicura applicabile nei casi in cui un
oggetto Figlio non debba necessariamente avere un Padre. Per esempio non
va bene per modellare un tree.
2) All'add() di un figlio viene fatta la remove() dall'eventuale vecchio
padre. Soluzione da applicare attentamente per via di eventuali
riferimenti circolari, ma molto utile per gestire efficacemente tree
dinamici.
3) Figlio è innerclass di Padre o cmq non può essere costruito in modo
autonomo. La relazione Padre/Figlio è congelata alle impostazioni
iniziali e non può cambiare; per creare le istanze di Figlio si fa
qualcosa tipo padre.createFiglio(). Utile per modellare gerarchie
immutabili tipo, appunto, alberi genealogici etc.
pole
--
ammentos - a lightweight persistence framework for JDK5
http://ammentos.biobytes.it
Flash tutorial: http://ammentos.biobytes.it/quickstart/quickstart.html |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|