Ho due classi C ++ con una relazione: una classe contenitore che ha una lista di elementi. Ad esempio, una biblioteca ha molti libri. Le classi sono la biblioteca e il libro.
Ora dal mondo esterno devo creare, aggiornare ed eliminare libri. Inoltre ci sono altre classi che sono interessate a sapere quando accade un evento su un libro e queste istanze (osservatori) possono essere create in fase di esecuzione.
Ora ho diversi modi per procedere:
1) Usa sempre il contenitore per fare l'operazione: punto centrale di gestione ma devo creare coppie di metodi per esempio setTitle (bookID) che chiama setTitle () sul libro, male;
2) Utilizzare un getBook () sul contenitore per restituire un riferimento del libro, consentire la modifica, a questo punto devo usare un metodo di commit per notificare il contenitore che può notificare l'osservatore ma in questo modo il pattern non impone un "commit", voglio dire se il chiamante esterno non chiama commit () mi libero:)
3) Usa un getBook () sul contenitore per restituire una copia del libro e un metodo di aggiornamento del contenitore per sovrascrivere il libro, il punto centrale di gestione di nuovo ma il libro se grande è un problema, un sacco di copie sono veramente cattivi.
Qualche consiglio? C'è qualche schema che copre questo caso d'uso?