Filosofia dietro lo schema del memento

9

Ho letto sul tema memento da varie fonti di internet. Informazioni diverse da fonti diverse mi hanno lasciato in confusione sul motivo per cui questo schema è effettivamente necessario.

L'implementazione dofactory dice che l'intenzione principale di questo modello è di ripristinare lo stato del sistema .

Wiki afferma che l'intenzione principale è able di ripristinare le modifiche sul sistema. Ciò ha un impatto diverso, dicendo che è possibile per un sistema avere un'implementazione del memento senza necessità di ripristino. E questa capacità di ripristino è una caratteristica di questo.

OODesign dice che

It is sometimes necessary to capture the internal state of an object at some point and have the ability to restore the object to that state later in time. Such a case is useful in case of error or failure.

Quindi, la mia domanda è perché esattamente usiamo questo? È per salvare gli stati precedenti o per promuovere l'incapsulamento tra il custode e il ricordo? Perché questo tipo di incapsulamento è così importante?

Modifica: per chi visita, controlla questa implementazione!

Modifica : sto lavorando per implementare una soluzione di memoria per il mio problema. Pubblicherò un'altra domanda a riguardo e collegherò quella domanda a questa. Grazie a tutti per aver risposto con preziosi suggerimenti!

Modifica 3 : Ecco il link alla mia implementazione di esempio

    
posta TheSilverBullet 27.08.2012 - 15:30
fonte

3 risposte

2

Un modello simile, Memo o Memoization memorizza anche lo stato, ma viene spesso utilizzato come ottimizzazione della velocità del programma. Se un'operazione che richiede molto tempo ha un numero limitato di input e output comuni, i più comuni (o tutti) possono essere archiviati in una tabella hash. Quando viene richiamato con gli stessi input, prima controlla l'hashtable e se li trova, restituisce l'output precedente senza ricalcolarlo.

Immagino che un pattern di Memento possa essere usato anche per le prestazioni - invece di fare tutti i calcoli inversi per un cambio di stato inverso, basta ripristinare dallo stato precedente. Alcune funzioni sono a senso unico, quindi non è possibile annullare se non si memorizza lo stato precedente.

Potresti usare un pattern Memento per memoizzare una funzione periodica, o simmetrica come il seno. Calcola tutti i valori da 0 a 180 gradi, quindi torna indietro per ottenere i valori negativi da 180 a 360. Meglio ancora, calcola i valori da 0 a 90, quindi vai indietro tra questi valori per ottenere 90-180, avanti per 180-270 e indietro da 270 a 360.

Ctrl-Z in Word o la funzione di annullamento di qualsiasi software è probabilmente implementata utilizzando il pattern di memento, o in alcuni casi, possibilmente da un rovescio della funzione che ha apportato ogni modifica. Nel secondo caso, la cronologia di quali funzioni sono state chiamate sarebbe un ricordo, quindi suppongo che il pattern di memoria sia sempre utilizzato per annullare.

    
risposta data 27.08.2012 - 19:24
fonte
8

Di per sé, Memento Pattern è appena usato per catturare e salvare stati. L'incapsulamento esiste solo per proteggere gli stati dal resto del sistema - una volta che uno stato viene catturato, deve essere controllato attentamente. Ad esempio, non ha senso essere in grado di cambiare uno stato precedente una volta salvato (che cambierebbe la cronologia) e potrebbe non avere senso tornare semplicemente a uno stato precedente di un oggetto senza influenzare gli altri (per impedire il sistema non ha inserito uno stato completamente invalido).

L'uso più comune di un Memento che ho visto è quello di supportare la funzionalità di annullamento. Si riferisce anche alla memorizzazione delle funzionalità di ripetizione spostandosi indietro nel tempo.

    
risposta data 27.08.2012 - 15:44
fonte
1

Tutte queste definizioni ti guidano nella stessa direzione; stanno tutti dicendo che il punto è essere in grado di ripristinare qualcosa al suo stato precedente. Che qualcosa può essere l'intero sistema, o solo un singolo oggetto.

Questo modello è utile se un record cambia stato nel tempo, ma hai i requisiti aziendali per essere in grado di ripristinarlo in qualsiasi stato precedente in qualsiasi momento. In alternativa, se è necessario essere in grado di visualizzare il record come era in qualsiasi momento precedente. Questi tipi di requisiti sono molto comuni in molti tipi di sistemi.

    
risposta data 27.08.2012 - 15:37
fonte

Leggi altre domande sui tag