"A che cavolo serve l'attributo Serializable?" (cit.)

Se lo chiedono, come riferito dal mitico ughetto, anche il Cradle nonchè il Mostardone. Parliamone :-) Innanzitutto, leggete sia il post originale sia il thread dei commenti, che IMVHO è anche più interessante della domanda in oggetto <g>

Ma torniamo a quel "cavolo" di SerializableAttribute: perchè essere costretti a decorare un oggetto in tal modo? A prima vista, in effetti è inutile: io voglio "solo" che EF/WCF/vattelapesca possa restituire col minimo sforzo un grafo e "minimo sforzo" significa "usa le mie classi as is e non chiedermi nulla di più". Insomma: parafrasando una famosa canzone eighties (Imagination) "Serialization, that's all I want from you!". E poi io sono un talebano fan sostenitore della "infrastructure ignorance", quindi per coerenza dovrei unirmi alla lista dei sostenitori del quesito :-)

Il problema è: cosa significa serializzare? Se accettiamo che la serializzazione sia "solo" una implementazione idiomatica di Memento [GoF] allora la decorazione in effetti è inutile. Ma se desiderassimo che la copia deserializzata di un oggetto possa supportare gli stessi casi d'uso dell'oggetto originale, la musica cambierebbe: come si potrebbe garantire che una copia deserializzata di un oggetto di tipo SqlConnection o Thread possa essere utilizzabile? Tanto per fare un esempio, nel primo caso il DBMS potrebbe essere attivo al momento della apertura+serializzazione dell'oggetto connection, salvo poi risultare "spento" al momento della reidratazione. Ecco quindi che decorare un oggetto significa affermare che il "clone" funzionerà. E poichè non tutti gli oggetti potrebbero sopravvivere *funzionalmente* ad un processo di (de)serializzazione, ecco che affermare esplicitamente quali classi siano serializzabili è "cosa buona e giusta" (cit.)

Technorati Tag:

posted @ Friday, September 26, 2008 12:21 PM

Print

Comments on this entry:

# re: "A che cavolo serve l'attributo Serializable?" (cit.)

Left by Lorenzo Barbieri at 9/26/2008 1:44 PM
Gravatar
Complimenti! Davvero un ottimo post.

# re: "A che cavolo serve l'attributo Serializable?" (cit.)

Left by Marco De Sanctis at 9/26/2008 2:30 PM
Gravatar
Per quanto io continui a sostenere che sarebbe più user friendly specificare quando un oggetto *non* è serializzabile e far sì che lo siano by default.

# re: "A che cavolo serve l'attributo Serializable?" (cit.)

Left by Raffaele Rialdi at 9/26/2008 10:39 PM
Gravatar
@Andrea. Concordo dal punto di vista concettuale.
Dal punto di vista tecnologico dico che Serializable (così come XmlSerializable) non serve *più* quasi a nulla da quando esiste il DataContractSerializer (che come ben sai non è confondere con WCF e parenti).
I due vecchi serializer hanno ormai senso solo per compatiblità con il passato.

@Marco, @Ugo. Io invece preferisco il modello "opt-in" della serializzazione dei DataContract. L'oggeto deve essere pronto ad essere serializzato e deserializzato e non è così scontato che si possa fare in modo indolore. Se fosse il default ci sarebbero bug "by design". Almeno così il dev ci deve pensare due volte.
Inoltre con il DataContractSerializer non sei obbligato ad avere una classe base serializzabile e questo sistema molti dei problemi che probabilmente voi avete in mente quando volete il comportamento opposto.

# re: "A che cavolo serve l'attributo Serializable?" (cit.)

Left by Andrea Saltarello at 9/27/2008 10:07 AM
Gravatar
@Raf: infatti io stavo affrontando il "problema" da un punto di vista concettuale e non tecnologico, quindi... "opt-in" tutta la vita! E poi lo sai che io sono uno "strongly typed opt-in guy" :-)

Your comment:



 (will not be displayed)


 
 
 
Please add 6 and 5 and type the answer here:
 

Live Comment Preview:

 
«October»
SunMonTueWedThuFriSat
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234