dynamic: usi ed abusi

Ho sempre “sponsorizzato” pochissimo (=se non mai) l’utilizzo dei dynamic scrivendo codice in C#. Non mi piacciono. Non e’ un segreto e non faccio fatica ad ammetterlo. Il punto che -come in ogni cosa- tutto si trasforma ed anche l’odio piu’ sfrenato puo’ diventare un sentimento di amore sotto necessita’. Volete sapere cosa e’ successo nello specifico?
dynamic
Prima di mostrare il caso pratico in cui ho abusato dei dynamic voglio riportarvi la loro definizione direttamente da Visual Studio:
dynamic - represents an object whose operations will be resolved at runtime
In soldoni cosa significa? Il dynamic non e’ una novita’ recente. A dirla tutta risale alla versione di C# 4.
Tornando al codice come possiamo usarlo?
|
|
Ora a “pippo” potrete assegnare QUALSIASI valore ed usarlo via codice. Il tutto verra’ risolto a runtime.
caso pratico
La scorsa settimana stavo scrivendo un tool di conversione per passare dei dati da SQL Server a CosmosDB. Siccome il tool -una volta finita l’esportazione- andra’ a morire, non ho voluto “sbattermi” a creare una serie infinita di DTO per mappare i dati.
Ora vediamo l’esempio pratico. Il codice e’ lo stesso usato, salvo i “dettagli” legati al nome di tabelle e campi.
|
|
Quale sara’ la tipologia di items secondo voi? Analizzando il suo vero valore scopriremo quanto segue:
|
|
Ora -poniamoci la domanda- come ottengo i valori presenti all’interno di items?
|
|
ATTENZIONE: Ho creato tre TestCase e nel foreach appena scritto li ho messi uno dopo l’altro. L’ho fatto per comodita’ di scrittura del codice. Tenete conto che per leggere i dati corretti dovrete eseguire il TestCase in maniera corretta (query & foreach)
dynamic: i contro
Vi ricordate quando ho scritto in apertura?
dynamic - represents an object whose operations will be resolved at runtime
Cosa succede se dovessi scrivere una proprieta’ non valida?
|
|
Uno dei problemi del dynamic e’ il non ricevere errori di compilazione. Come mai? Tutto verra’ risolto a runtime!
Prima di chiudere vi segnalo un altro difetto per cui usare i dynamic corrisponde al male: il codice diventa LENTO rispetto ad un DTO tipizzato. Si, ho appena detto che l’acqua bollente … scotta! Il fatto che non sempre viene considerato scrivendo codice.