40 votos

¿Por qué debo preocuparme por la RTTI en Delphi?

He escuchado mucho acerca de la nueva y de mejora de la RTTI capacidades de Delphi 2010, pero debo admitir mi ignorancia...no lo entiendo. Sé que cada versión de Delphi ha apoyado RTTI...y sé que RTTI (tiempo de ejecución Tipo de Información) me permite acceder a información de tipo, mientras que mi aplicación se está ejecutando.

Pero ¿qué significa exactamente que significa? Es Delphi 2010 RTTI de apoyo a la misma cosa como la reflexión .NETA?

Podría alguien por favor explique por qué RTTI es útil? Pretender que yo soy su puntiaguda de pelo jefe y que me ayude a entender por qué RTTI es genial. ¿Cómo podría yo lo uso en una aplicación en el mundo real?

36voto

Aaronaught Puntos 73049

RTTI en Delphi no es todavía bastante tan completa como la Reflexión .NET u otros lenguajes administrados, porque está funcionando en el código compilado, no un Lenguaje Intermedio (bytecode). Sin embargo, es un concepto muy similar, y el nuevo RTTI sistema en Delphi 2010 trae un montón más de cerca a la reflexión, la exposición de toda una API orientada a objetos.

Pre-D2010, el RTTI era bastante limitado. Acerca de la única cosa que jamás he visto hacer con ella era la conversión de un tipo enumerado a una cadena (o viceversa) para utilizar en la lista desplegable. Yo podría haber usado a un punto de control de la persistencia.

Con la nueva RTTI en D2010 usted puede hacer un montón de cosas más:

  • La Serialización XML

  • Atributobasado en metadatos (TCustomAttribute). Casos de uso típicos sería validación automática de las propiedades y automatizado de comprobaciones de permisos, dos cosas que normalmente tiene que escribir un montón de código para.

  • La adición de secuencias de comandos Activa de apoyo (es decir, utilizando la secuencia de comandos de Windows control)

  • La construcción de un sistema de plug-ins, usted podría hacer esto antes, pero había un montón de dolores de cabeza. Yo no era capaz de encontrar un muy buen ejemplo de alguien que hace esto en la parte superior a la inferior, pero todas las funciones necesarias están disponibles ahora.

  • Parece que alguien incluso tratando de implementar la Primavera (DI marco) para Delphi 2010.

Así que es sin duda muy útil, aunque no estoy seguro de qué tan bien usted sería capaz de explicar a un PHB, la mayoría de su utilidad es, probablemente, va a ser realizada a través de la 3º parte de las bibliotecas y de los marcos, de la misma forma en que trabaja en el .NETA de la comunidad hoy - es raro ver código de reflexión sentado en la lógica de negocio, pero una típica aplicación hará uso de varios reflexión basada en componentes como un Objeto-Relacional Mapper o Contenedor de IoC.

He respondido a la pregunta?

11voto

LachlanG Puntos 3205

La mayoría de la gente probablemente no va a usar en una aplicación real.

La gente que va a usar son el marco de los constructores. Marcos: DUnit hacen un uso extensivo de RTTI.

Con la nueva RTTI capacidades que debe esperar para empezar a ver más avanzadas marcos y las herramientas que aparecen, de forma similar a lo que está disponible .NET. Estos marcos va a revolucionar su desarrollo más que RTTI va en su propio.

11voto

Mason Wheeler Puntos 52022

D2010 extendido de RTTI es muy parecido a C#'s de la reflexión. Se le da la posibilidad de conseguir en cualquier campo de un objeto, o de examinar sus métodos. Este tiene todo tipo de usos potenciales. Por ejemplo, si usted puede leer cualquier campo de un objeto, puede escribir código de serialización que puede trabajar con cualquier objeto. Y la capacidad de inspeccionar los métodos y obtener su nombre y firma hace una clase mucho más fácil registrar con un motor de secuencias de comandos.

Para mí, esa es la principal ventaja de extendido RTTI: La capacidad de escribir código que funciona con cualquier clase mediante el examen de sus miembros, en lugar de escribir diferentes versiones de un mismo código una y otra vez, a medida de cada clase.

2voto

Warren P Puntos 23750

RTTI en Delphi siempre ha sido importante desde la versión 1.0. Clásico RTTI características incluyen la "publicado" propiedades de la sección de Clases, lo que permitió el Inspector de Objetos y el componente designtime características para trabajar. Para mis propósitos, me gustaría utilizar a menudo Publican las propiedades de la clase para permitir la enumeración de las propiedades en tiempo de ejecución. Para almacenar cosas de mis objetos en el disco, para la persistencia.

El Delphi 2010 RTTI se extiende de este clásico de la RTTI masivamente, tanto así que usted podría ser perdonado por pensar en Delphi no han RTTI hasta delphi 2010.

Yo diría que el #1 de las aplicaciones más útiles de La "Nueva RTTI" son (como varias otras respuestas ya estado) va a ser el de Marcos, escrito por los gurús, que:

  1. Manejar la persistencia de los archivos o bases de datos. La base de datos y la configuración o el documento de ahorro de energía/carga de marcos y componentes a usar este bajo el capó.

  2. Manejar decapado/referencias/codificación/decodificación y de varios over-the-wire formatos como JSON, XML, EDI, y otras cosas.

  3. La unidad de pruebas fue mencionado por alguien más (JUnit), pero creo que tal vez el mismo marcos podría ser realmente útil para la depuración de error y herramientas de reporting. Dado un objeto que se pasa como parámetro, en la pila, ¿por qué no tener informes de errores que puede volcar todos los datos que se transmiten a una función que no se pudo, y no sólo una lista de funciones?

Como se puede ver, algunas de las más creativas de la gente probablemente piensa incluso más usos de esta. Se podría decir, que a pesar de no traer a la paridad .NET reflexión (que otra respuesta nos habla más acerca de), que trae un montón de "lenguaje dinámico de características" (Pensar en Perl, Python, JavaScript) a un establecimiento inflexible de tipos estáticos de tipo mundial en sistemas de Delphi.

0voto

Free Consulting Puntos 2082

Para mí, personalmente, extendido RTTI dio una posibilidad para recuperar la convención de llamada del método del puntero. Sin embargo, en la actualidad, ya que el código está bajo condicional de la directiva, porque no estoy satisfecho con ella.

(Críticas y sugerencias sobre workarond básica RTTI son bienvenidos, tho)

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X