Newsgroup: it.comp.lang.delphi
Titolo: Persistenza di un oggetto

Esiste una tecnologia freeware che consenta a runtime, in modo facile e veloce, 
il salvataggio su file dello stato corrente (valori contenuti nelle proprieta') 
di un oggetto istanziato da una mia classe?
Siccome la classe (derivata da TObject) l'ho gia' scritta, l'ideale sarebbe 
ottenere tutto cio' senza troppi rimaneggiamenti del codice esistente.
Faccio inoltre presente che la suddetta classe ha una struttura piuttosto 
complessa di tipo gerachico con liste di oggetti e oggetti di classi "figlie" 
annidati dentro oggetti di classi "genitori". Ovviamente io ho bisogno di 
salvare la struttura completa contenuta in ogni istanza della classe principale. 
Il massimo sarebbe poi avere anche la possibilita' di stampare il tutto in modo 
da evidenziare le relazioni (padre - figlio) tra i valori contenuti negli 
oggetti dei vari livelli della gerarchia.
Grazie a chi vorra' rispondermi.
Andrea Barbagallo

su .net esiste la reflection, che è in pratica la persistenza in delphi 
con una gesione molto semplificata.
A differenza della vcl che impone l'ereditare dalla classe tpersistent, 
su .net affinche una classe supporti la persistenza (reflection) deve 
ereditare da una interfaccia.
Se cerchi nei vecchi post del ng l'argomento è stato trattato anche se 
non di recente.
-- 
Alberto Salvati
A NEAPOLITAN Delphi Developer who is studying c# and .net
"Dicette 'o pappece 'nfaccia 'a noce dammi 'o tiempo che pure te spertoso"

 interfaccia.
Il fatto di ereditare direttamente da TPersistent non implica che un
oggetto posso persistere il suo stato in Delphi cosě come credo anche
in .NET . La reflection č potente ma in fondo credo sia una evoluzione
dell'RTTI, non ne sono completamente sicuro essendo completamente
digiuno di .NET ;) . E' per questo che anche in .NET esistono gli OPF
cosě come in Delphi.
-- 
guastatore
ICLDweb: 
http://www2.samatel.com/icld/

 ereditare da una interfaccia.
Per quanto ho avuto modo di testare, mi pare che con la Reflection si 
riesca a manipolare *qualsiasi* tipo.
Ciao,
   Marco.
-- 
Marco «Alka» Breveglieri	
http://www.marco.breveglieri.name
  «bvmcnxsjlkhròhyeq, potrei scrivere a questo punto,
   se mi addormentassi sui tasti» (Daniele Luttazzi)

 nelle proprieta') di un oggetto istanziato da una mia classe?
Se ti stai riferendo all'uso di OPF (Object Persistence Framework), ci 
sono varie soluzioni che potresti adottare.
Ricorrendo ad un tool già esistente, come *InstantObjects* 
(
http://www.instantobjects.org/
), devi per forza modificare la tua 
classe base per ereditare dalle classi che ti vengono messe a 
disposizione del framework per inserirle nel "meccanismo" di persistenza 
supportato dal framework stesso.
In caso contrario, potresti valutare l'implementazione di un tuo 
framework per la persistenza degli oggetti, seguendo quanto descritto 
nell'utilissima documentazione di *tiOPF* 
(
http://www.techinsite.com.au/
), segnalatomi dal buon Guastatore tempo 
fa...non ho mai realizzato un OPF completo, ma dalla teoria estrapolata 
dalla documentazione ho potuto comunque trarre buone idee per 
risparmiare notevole tempo nella creazione di un progetto in cui avevo 
oggetti da memorizzare e ricaricare da un DB FireBird con la minor 
fatica possibile.


Sorry!
Ho confuso reflection con serializzazione. :((


Se non vado errato, usare reflection su una istanza richiede che la
classe implementi l'interfaccia ISerializable.
Ma e' un po che non smanetto con .net....

classe implementi l'interfaccia ISerializable.
da quello che ne so io ... no ... le classi del name
space reflection non hanno necessità che l'istanza
analizzata erediti da qualche classe particolare o
implementi una data interfaccia. Reflection nasce per
poter analizzare tipi, campi e metodi di classe con la
possibilità di creare e/o istanziare nuovi tipi a
runtime.
Mentre l'implementazione dell'interfaccia ISerializable
in una classe, permette di scrivere il proprio metodo
di serializzazione dei dati della classe in modo che,
poi, la classe stessa, mediante uno strumento di
formattazione, possa essere serializzata (scritta) su
uno StreamingContext che può essere un qualsiasi flusso
stream (file, memoria, comunicazioni, ecc)
	Ciao
	MassimoB
 
---------------------------------
http://www.massimobeschi.it/
---------------------------------
Se tu pagare come dici tu ...
Io lavorare come dico io ...
Se tu pagare come dico io ...
Io lavorare come dici tu ...
---------------------------------

Alberto Salvati


 da quello che ne so io ... [...]
Come disse il buon Amadori: "10+!" :-D
