L'interfaccia IClonable

Oggi mi sono svegliato modellatore di applicazioni enterprice e mi sono subito messo sul domain, ma mentre implementavo l’interfaccia IClonable per le mie entity pensavo a come sarebbe stato bello non dover scrivere 30 righe di codice per ogni classe da clonare :D.

Per evitare di scrivere 30 righe su ogni classe ne ho scritte 100 utilizzando la reflection (la parte del framework che più odio), realizzando un metodo che creava una nuova istanza dell’oggetto passato, si passava tutte le proprietà e le inseriva nel nuovo oggetto. La stessa identica procedura che facevo io a mano, ora la faceva il mio metodo, con in più il vantaggio di non avere errori di battitura.

Beh che dire fantastico!!!

Ma il mio odio per la reflection è telmente tanto (forse perchè non ci capisco niente, forse perchè è lenta) ho cercato un’altra soluzione, ossia l’idea di serializzare la classe e deserializzarla in una nuova instanza.

User utente = new User();

utente.Id = Guid.NewGuid();

utente.FirstName = "Ugo";

utente.LastName = "Lattanzi";

BinaryFormatter bFormatter = new BinaryFormatter();

MemoryStream stream = new MemoryStream();

bFormatter.Serialize(stream, utente);

stream.Seek(0, SeekOrigin.Begin);

User clone = (User)bFormatter.Deserialize(stream);

Da qui a realizzare una classe che tramite i generics possa venir buona con tutte le classi è piuttosto semplice in più con il vantaggio di evitare i cast.

Nella stessa categoria

Commenti
Cradle scrive:
L'interfaccia IClonable

All'interno dell'oggetto puoi utilizzare il metodo MemberwiseClone per effettuare una shallow copy. Ciò che fai tu invece è una deep copy che, al contrario di ciò che si possa pensare, in genere fa più male che bene (oltre che farti allegramente saltare tutti i lazy load del mondo).
25/08/2006 ore 22.53 | 3 risposte
nostromo scrive:
Re: L'interfaccia IClonable

onestamente anche se non uso molta reflection quando la devo usare, l'ultima cosa che mi preoccupa sono le performance.

visto che alla fine quello che pesa sulle performance dell'applicazione è ben altro.

e poi non so credo che alla fine serializzare deserializzare grandi oggeti posso risultare più lento della reflection. ma non ho le provoe

ciao marco
26/08/2006 ore 22.01 | 1 risposta
»»»» imperugo scrive:
Re: L'interfaccia IClonable

non ho le prove

Neanche io, ma sicuramente come codice è più corto (quindi già lo preferisco) e poi meglio ancora la soluzione di Cradle di usare MemberwiseClone per una shallow copy, non la sapevo grazie Crad
Fatto buone ferie in montagna??? Ricaricato???
28/08/2006 ore 10.27 | 1 risposta
nostromo scrive:
Re: L'interfaccia IClonable

diciamo che sono più riposato di prima
28/08/2006 ore 14.34

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.

© 1998-2008 - imperugo - Il blog di Ugo Lattanzi

TagCloud
BLOG INFO
  • Post: 70
  • Commenti: 46
  • TrackBacks: 11
  • Feed blog e contenuti tecnici: RSS
  • Feed blog: RSS Atom OPML
CATEGORIE
I PIÙ LETTI DEL MESE
IN EVIDENZA