2010-04-17 19 views
19

Ho trovato un great explanation about the new RTTI in Delphi, ma non capisco una cosa importante di tutto ciò che ho letto - Dove posso usarlo?Uso pratico per il nuovo RTTI di Delphi - Attributi, Valori

Cosa deve sostituire?

+0

I'll +1 la tua domanda, se fornisci un link alla grande spiegazione di cui parli ... –

+1

Qui: http://robstechcorner.blogspot.com/2009/09/so-what-is- rtti-rtti-is-acronym-for-run.html La guida "utilizzo pratico" non è stata ancora scritta. Ecco perché l'ho chiesto. –

risposta

20

RTTI esteso funziona come Reflection in. NET. Ti dà accesso alle informazioni sulla struttura dell'applicazione interna. Puoi accedere alle proprietà della classe, ai metodi ecc. In fase di esecuzione, nella misura in cui non avresti potuto farlo prima.

Alcuni modi di usarlo:

  1. di serializzazione/deserializzazione di classi per XML o altri mezzi di comunicazione
  2. Mappatura degli oggetti a database. ORM.
  3. Clonazione di oggetti
  4. dinamica invocazione di metodi
  5. "scansione" di oggetto in fase di esecuzione e di agire secondo tale.
  6. più facile lo sviluppo di sistemi di tipo "plug-in"

C'è probabilmente un sacco di scenari in cui sarebbe vantaggioso per usarlo. In breve, aggiunge un aspetto dinamico alla tua applicazione. Il tuo prodotto è in grado di fare alcune cose in fase di esecuzione, e in modo più efficiente, rispetto alla progettazione di tutto in fase di progettazione. Non è un proiettile d'argento e molte persone potrebbero non usarlo mai. Ma alcuni modelli di progettazione o alcuni problemi proprio non possono essere risolti (almeno non in modo efficiente) senza l'uso del nuovo RTTI

+3

Consentitemi di aggiungere anche questo ... verrà utilizzato principalmente da progettisti di framework o scrittori di componenti. Ad esempio, è possibile dare un'occhiata a DeHL che utilizza questa funzionalità per fornire la serializzazione XML ai programmatori. – vcldeveloper

5

Un esempio in cui esteso RTTI potrebbe essere utile:

Fino ad oggi, le proprietà della forma dovevano essere pubblicato, perché questa visibilità era necessaria per serializzare/deserializzare Delphi Form Files (dfm).

Con RTTI esteso, Delphi potrebbe utilizzare un nuovo livello di streaming che non richiederebbe questo alto livello di visibilità. Naturalmente questa è solo un'idea, ma in pratica ha il vantaggio che tutti i componenti di un modulo potrebbero essere privato o protetto. Questo sarebbe più OOP (incapsulamento) ed eliminerebbe il "rumore" causato da dozzine di voci irrilevanti nell'elenco dei campi modulo/proprietà visibili dall'esterno.


Un altro tipico caso di utilizzo prolungato RTTI sono Inversion of Control e Dependency Injection quadri.

Ad esempio il Delphi Spring Framework Delphi richiede Delphi 2010 (o superiore) a causa del suo uso intenso di RTTI, che può essere utilizzato per constructor injection.

+1

+1 per i componenti nella sezione protetta (non privata). –

+0

@Daniele: modificato la mia risposta, grazie per il suggerimento – mjn

Problemi correlati