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)