Immagina per un secondo che sto implementando il Memento Pattern, usando le seguenti classi.
Corsi
- Una classe Originator che ha rispettivamente proprietà pubbliche e private, campi e
- Una classe Memento che ha molte proprietà / campi che rappresentano lo stato del creatore
- Una classe CareTaker che agisce su un'istanza di Originator e salva un elenco di Mementos che rappresentano lo stato di Originator.
Utilizzando le classi di esempio sopra, esiste una ragione obiettiva per utilizzare una delle seguenti soluzioni rispetto all'altra? La premessa qui è che ho bisogno di esporre alcune proprietà che rappresentano parzialmente lo stato di Originator.
Soluzione n. 1
- Proprietà e campi che rappresentano lo stato sono duplicati su Originator & Memento
- Originator ha un metodo CreateMemento che inizializza un nuovo Memento con tutte le proprietà / campi condivisi tra i due
- Originator ha un metodo SetMemento che imposta i campi / proprietà di Originator su quelli che corrispondono a di Memento
Soluzione n. 2
- Originator ha un'istanza di Memento, che rappresenta lo stato corrente di Originator
- Originator espone come proprietà, le proprietà necessarie / campi del suo Memento, usando i getter / setter per aggiornare il promemore
- Originator non ha la propria copia di proprietà / campi che rappresentano il suo stato, invece utilizza Memento come backing store.
Capisco che idealmente dovrebbe esserci un'altra classe OriginatorState, quella Originator & Memento hanno entrambi istanze di, ma non sto chiedendo su quali classi creare. Sto chiedendo quale classe detiene l'informazione dello stato attuale dell'originatore. Sia l'Originatore che il Memento? Solo il Memento? o l'Originatore attraverso il Memento come nella Soluzione n. 2?