Nel corso del tempo ho eseguito il rollover dei miei formati per il salvataggio e il caricamento delle proprietà dell'oggetto, ma dovendo rivisitare questo aspetto mi chiedo come utilizzare il formato DFM del testo di Delphi. So che questo è davvero un formato "interno", ma il lettore per ora sembra abbastanza ben definito e gestisce tutti i tipi di proprietà. Qualcuno ha commenti sulle possibili insidie?Durata di utilizzo del testo DFM in formato Delphi per il mio negozio e recupero
risposta
In realtà non direi che DFM è un "formato interno". Sure Delphi lo utilizza internamente per moduli e datamodule, ma le classi TReader e TWriter che eseguono lo streaming sono accessibili pubblicamente e persino documentate. Quindi sono chiaramente destinati agli utenti finali.
Ora, il problema possibile è quando si salva uno stream e successivamente una delle classi nello stream cambia in modo che lo stream non sia più compatibile. Potresti averlo visto in Delphi se tenti di aprire un modulo salvato in D2007 + in D7 (proprietà mancante). Ma anche se succede, non è troppo difficile da risolvere. Otterrai un'eccezione che riporterà la proprietà esatta che sta causando il problema. Devi anche registrare tutte le classi che vuoi trasmettere in streaming con RegisterClass
.
DFM può essere memorizzato in formato binario o di testo. Anche se lo memorizzi in formato binario, puoi convertirlo in testo (usando ObjectBinaryToText
), una volta in formato testo, è facile da correggere.
Quindi, i problemi che si possono verificare si verificano a causa di modifiche incompatibili nella struttura, ma questi non hanno nulla a che fare con il meccanismo DFM stesso e si verificano anche utilizzando qualsiasi altro meccanismo di streaming.
Per quanto riguarda la longevità, è ancora possibile aprire i DFM salvati con D1 nell'ultimo Delphi. Quindi, finché tieni a mente la compatibilità con le versioni precedenti, non hai niente da temere.
In conclusione, la scelta di un particolare formato, DFM, XML, JSON, il proprio ... non influenza realmente la longevità. Tutti richiedono lo stesso livello di compatibilità.
I motivi per scegliere il formato hanno più a che fare con le decisioni per quanto riguarda:
- l'interoperabilità con altre applicazioni/servizi
- dimensioni/velocità/leggibilità umana
Ma non hanno fatto menziona qualcuno di quelli nella domanda.
Quindi suggerisco di utilizzare DFM in modo personalizzato, poiché significherebbe meno codice da mantenere.
Buona risposta, e tu hai il mio upvote. Ma penso che "lo streaming DFM sia più compatibile con il futuro del tuo formato" (che tu intendi) non sia strettamente corretto. Formati altamente flessibili e universali come XML, JSON o elenchi di coppie di valori-chiave testuali hanno una compatibilità diretta superiore, a scapito di essere un po 'macchinosi e ingombranti. Tuttavia, consiglierei solo quelli se la futura compatibilità di oggetti complessi fosse un grosso problema. –
Bella risposta, grazie. Prendo anche il tuo punto, Carl. –