2010-04-17 28 views
19

Encontré un great explanation about the new RTTI in Delphi, pero no entiendo una cosa importante sobre todo lo que he leído - ¿Dónde puedo usar eso?Uso práctico para el nuevo RTTI de Delphi - Atributos, valores

¿Qué se supone que debe reemplazar?

+0

Voy a hacer +1 a su pregunta, si proporciona un enlace a la gran explicación de la que usted habla ... –

+1

Aquí: http://robstechcorner.blogspot.com/2009/09/so-what-is- rtti-rtti-es-acronym-for-run.html La guía de "uso práctico" aún no está escrita. Es por eso que pregunté. –

Respuesta

20

El RTTI extendido funciona como Reflection en .NET. Le da acceso a la información de su estructura de aplicación interna. Puede acceder a propiedades de clase, métodos, etc. en tiempo de ejecución, en la medida en que no podría hacerlo antes.

Algunas maneras de usarlo:

  1. serialización/deserialización de clases a XML u otros medios
  2. mapeo de objetos a bases de datos. ORM
  3. Clonación de objetos
  4. invocación dinámica de métodos
  5. "exploración" del objeto en tiempo de ejecución y actuando de acuerdo con eso.
  6. más fácil el desarrollo de los sistemas de tipo "plug-in"

Probablemente hay una gran cantidad de escenarios en los que sería beneficioso para usarlo. En resumen, agrega aspecto dinámico a su aplicación. Su producto puede hacer algunas cosas en tiempo de ejecución, y de manera más eficiente, que diseñar todo en designtime. No es una bala de plata y mucha gente nunca la usará. Sin embargo, algunos patrones de diseño o algunos problemas no se pueden resolver (al menos no en forma eficiente) sin el uso de la nueva RTTI

+3

Permítanme agregar esto también ... será utilizado principalmente por diseñadores de marcos o escritores de componentes. Por ejemplo, puede echar un vistazo a DeHL que usa esta característica para proporcionar serialización XML a los programadores. – vcldeveloper

5

Un ejemplo en el extendido de RTTI podría ser útil:

Hasta hoy, las propiedades del formulario debían ser publicado, porque esta visibilidad era necesaria para serializar/deserializar los archivos de formulario de Delphi (dfm).

Con RTTI extendido, Delphi podría utilizar una nueva capa de transmisión que no requeriría este alto nivel de visibilidad. Por supuesto, esto es solo una idea, pero en la práctica tiene la ventaja de que todos los componentes en un formulario pueden ser privados o protegidos. Esto sería más OOP (encapsulación) y eliminaría el "ruido" causado por docenas de entradas irrelevantes en la lista de campos/propiedades de formulario visibles desde el exterior.


Otro caso de uso típico para extendida RTTI son Inversion of Control y Dependency Injection marcos.

Por ejemplo, Delphi Spring Framework Delphi requiere Delphi 2010 (o superior) debido a su uso intensivo de RTTI, que se puede usar para constructor injection.

+1

+1 para componentes en la sección protegida (no privada). –

+0

@Daniele: editado mi respuesta, gracias por la sugerencia – mjn

Cuestiones relacionadas