Pattern Stanza - Persona
Post date: Feb 20, 2015 12:39:54 PM
Work in progress...
Relazione programmatica (responsabilità multipla)
Stanza 0..1 occupazione 0..1 Persona
A cosa serve
Centralizzare il controllo dell'occupazione di una stanza fuori da essa, in modo da evitare che per errore una persona possa occupare una stanza già occupata.
Se richiedo l'eliminazione di una stanza non occupata effettivamente dalla persona che voglio rimuovere, o che non rispetta un vincolo, questa operazione non va a buon fine
Il controllo di inserimento è esterno quindi posso controllare che la stessa persona non stia già occupando un'altra stanza.
Il controllo della rimozione è esterno. Quello che sto togliendo è ciò che è effettivamente collegato? (equals)
Se non ci fosse
Io darei la responsabilità di occupare una stanza ad una persona (persona ha link a stanza). Se voglio inserire una persona in una stanza chiederei alla stanza se è occupata (stanza ha il riferimento alla persona che la occupa), quindi se contiene essa stessa un riferimento ad una persona, se non la contiene, la inserisco.
MA SE LA PERSONA OCCUPA GIA'UN ALTRA STANZA??? ERRORE (ho una persona che occupa 2 stanze e io non lo so)
Se voglio rimuovere una persona da una stanza, vedo se è dentro, e se si, la tolgo.
MA SONO SICURO CHE LA PERSONA CHE RIMUOVO E'EFFETTIVAMENTE NELLA STANZA???
Scenario base
Una stanza può essere o no, occupata da una persona ed una persona può occupare o meno un stanza.
Classi coinvolte
Persona Stanza TipoLinkOccupazione AssociazioneOccupazione Classe Stanza/Persona -inserisciLinkOccupasione(AssociazioneOccupazione ass) -eliminaLinkOccupazione(AssociazioneOccupazione ass) -TipoLinkOccupazione, che ritorna appunto esso Classe AssociazioneOccpupazione
Note
Costruttore privato -getTipoLink, che ritorna TipoLinkOccupazione -inserisci(TipoLinkOccupazione) -elimina(TipoLinkOccupazione) Classe TipoLinkOccupazioine
Note
Costruttore privato -equals (su oggetti ma non attributi)