Memento pattern: saving memento [closed]

3

C'è un problema su questo modello che mi turba.

In una situazione in cui dobbiamo salvare uno stato in un file, è la classe Memento che dovrebbe essere responsabile della gestione di questo processo? (ad esempio, fornendo le funzioni SaveToFile e RestoreFromFile)

    
posta user2604083 14.05.2015 - 22:26
fonte

1 risposta

4

Risposta breve: No .

Risposta lunga:

Ripensa al principio di responsabilità singola . Un oggetto (o metodo o modulo) dovrebbe avere solo un motivo per esistere. Questo motivo può essere grande o piccolo, ma è coeso . Un ricordo esiste per gestire lo stato temporale . In altre parole, lo stato della traccia man mano che cambia, per consentire lo spostamento indietro e in avanti attraverso tali stati. L'obiettivo del pattern memento è essenzialmente quello di abilitare il concatenamento undo / redo ( ctrl + Z / ctrl + Y operazioni.

Quei ricordi possono essere serializzabili e il mittente può anche essere serializzabile. Questi moduli serializzati possono essere adatti per il salvataggio su disco, buffer di memoria, stampa su carta, qualunque cosa tu voglia: ma il memento stesso non si occupa di salvare nulla su disco. Questa non è la responsabilità .

Mentre un oggetto può sapere come serializzare e deserializzare se stesso 1 , generalmente l'azione di salvare o caricare effettivamente da / su disco o qualsiasi altra cosa è responsabilità di un altro oggetto. Questa è l'idea alla base della "serializzazione": è un'interfaccia ampia molto tra qualsiasi oggetto che ha la potenziale necessità di copiare se stesso in un'altra posizione e gli oggetti responsabili della comunicazione con tali luoghi.

Questo è tipicamente fatto con i flussi. La serializzazione significa davvero "convertire questo oggetto in una stringa di byte o caratteri" che uno stream può quindi consumare. Lo stream potrebbe essere un flusso di file per il salvataggio / caricamento da / su un file su disco, rete, ecc. Potrebbe essere supportato da un socket, HTTP, un servizio Web, qualsiasi cosa. Il ricordo non ha bisogno di sapere che cos'è un "disco" o che cos'è un "file".

1 Sebbene possa essere appropriato per un oggetto semplice o un singolo oggetto gestire la propria serializzazione, un oggetto complesso o un modulo con molti oggetti (ad es. gruppo di DAO s) può essere meglio servito con oggetti che gestiscono la serializzazione per loro. C'è un overhead associato a questo, e ha senso solo spendere tempo e fatica quando rende più chiaro il design del sistema.

    
risposta data 15.05.2015 - 12:14
fonte

Leggi altre domande sui tag