42 votes

Pourquoi devrais-je me soucier de RTTI dans Delphi?

J'ai beaucoup entendu parler de la création ou de l'amélioration de la RTTI capacités de Delphi 2010, mais je dois avouer mon ignorance...je ne la comprends pas. Je sais que chaque version de Delphi a pris en charge RTTI...et je sais que RTTI (Runtime Type d'Information) me permet d'accéder à des informations de type, tandis que ma demande est en cours d'exécution.

Mais qu'est-ce que veux dire? Est Delphi 2010 RTTI l'appui de la même chose que de réflexion .NET?

Quelqu'un pourrait-il expliquer pourquoi RTTI est utile? Faire semblant que je suis votre pointues à poil patron et m'aider à comprendre pourquoi RTTI est cool. Comment pourrais-je l'utiliser dans une application réelle?

37voto

Aaronaught Points 73049

RTTI en Delphi est pas encore tout à fait autant de fonctionnalités que la Réflexion dans l' .NET, ou en d'autres langues, car il fonctionne sur le code compilé, pas un Langage Intermédiaire (bytecode). Cependant, il est très semblable à la notion, et le nouveau RTTI système de Delphi 2010, il apporte une beaucoup plus proche de la réflexion, de l'exposer toute une API orientée objet.

Pré-D2010, le RTTI était assez limitée. La seule chose que j'ai jamais fait avec c'était de la conversion d'un type énuméré à une chaîne de caractères (ou vice versa) pour une utilisation dans les listes déroulantes. J'ai peut-être utilisé à un point de contrôle de la persistance.

Avec la nouvelle RTTI dans D2010 vous pouvez faire beaucoup plus de choses:

  • La Sérialisation XML

  • Attributde métadonnées (TCustomAttribute). Cas d'utilisation typique serait de validation automatique de propriétés et automatisé des contrôles d'autorisation, deux choses que vous avez normalement à écrire beaucoup de code.

  • L'ajout d' Active Scripting support (c'est à dire à l'aide de Windows script de contrôle)

  • La construction d'un système de plug-in; vous pouvez le faire avant, mais il y avait beaucoup de maux de tête. Je n'étais pas en mesure de trouver un très bon exemple de quelqu'un qui fait cela à partir du haut vers le bas, mais toutes les fonctions nécessaires sont disponibles dès maintenant.

  • Il ressemble à quelqu'un du même essayer de les mettre en œuvre de Printemps (DI-cadre) pour Delphi 2010.

Donc, il est certainement très utile, bien que je ne suis pas sûr que vous seriez en mesure d'expliquer à un PHB; la plupart de son utilité est probablement va être réalisé par le biais de la 3e partie des bibliothèques et des cadres, de la même façon qu'il fonctionne dans le .NET de la communauté d'aujourd'hui - il est rare de voir code de réflexion assis dans la logique d'affaires, mais une application classique fera usage de plusieurs de réflexion basé sur des composants comme un Object-Relational Mapper ou Conteneur IoC.

Ai-je répondu à la question?

12voto

LachlanG Points 3205

La plupart des gens ne l'utiliseront probablement pas dans une application réelle.

Les personnes qui l'utiliseront sont les constructeurs de framework. Les frameworks tels que DUnit utilisent largement RTTI.

Avec les nouvelles fonctionnalités RTTI, nous devrions nous attendre à voir apparaître des frameworks et des outils plus avancés, similaires à ceux disponibles pour .NET. Ces frameworks vont révolutionner votre développement plus que RTTI ne le fera par lui-même.

11voto

Mason Wheeler Points 52022

D2010 étendu de RTTI est un peu comme le C#'s de la réflexion. Il vous donne la possibilité d'obtenir à tout champ d'un objet, ou d'inspecter ses méthodes. Cela a toutes sortes de possibilités d'utilisation. Par exemple, si vous pouvez lire n'importe quel champ d'un objet, vous pouvez écrire le code de sérialisation qui peut fonctionner avec n'importe quel objet. Et la capacité d'examiner des méthodes et obtenir leur nom et signature fait à une classe beaucoup plus facile de s'inscrire auprès d'un moteur de script.

Pour moi, c'est le principal avantage de l'étendue de RTTI: La possibilité d'écrire du code qui fonctionne avec n'importe quelle classe, par l'examen de ses membres, au lieu de la rédaction des différentes versions du même code, adapté à chaque classe.

2voto

Warren P Points 23750

RTTI en Delphi a toujours été important depuis la version 1.0. Classique RTTI fonctionnalités incluent la "publié" section propriétés de Classes, ce qui a permis de l'Inspecteur d'Objet et le composant fonctionnalités à la conception du travail. Pour ma part, j'utilise régulièrement Publié des propriétés de la classe pour permettre l'énumération de ces propriétés au moment de l'exécution. Pour stocker des choses de mes objets sur le disque, pour la persistance.

Le Delphi 2010 RTTI étend cette classique RTTI massivement, de sorte que beaucoup de sorte que vous pourriez être pardonné de penser Delphi n'a même pas le RTTI jusqu'à ce que delphi 2010.

Je dirais le n ° 1 de la plupart des applications utiles de "La Nouvelle RTTI" sont (comme plusieurs autres réponses déjà état) va être dans des Cadres, écrits par les gourous, que:

  1. Gérer la persistance de fichiers ou de bases de données. Base de données et de configuration ou d'un document d'enregistrement/chargement des cadres et des composants utilisez ce sous le capot.

  2. Poignée de décapage/ordonnancement/encodage/décodage et de divers sur-le-fil formats, comme JSON, XML, EDI, et d'autres choses.

  3. Les tests unitaires a été mentionné par quelqu'un d'autre (JUnit), mais je pense que peut-être les mêmes cadres pourrait être vraiment pratique pour le débogage et l'erreur d'outils de reporting. Étant donné un objet passé en paramètre, sur la pile, pourquoi ne pas avoir des rapports de bogues qui peuvent vider toutes les données qui ont été transmis à une fonction qui a échoué, et pas seulement une liste de fonctions?

Comme vous pouvez le voir, certaines personnes créatives sont enclins à penser de même plus d'utilisations pour cela. On pourrait dire, que même si elle n'apporte pas la parité .NET réflexion (une autre réponse qui parle le plus sur), elle apporte beaucoup de "dynamique du langage" caractéristiques (Pensez à Perl, Python, JavaScript) à un autre fortement typé statique type de systèmes dans le monde de Delphes.

0voto

Free Consulting Points 2082

Pour moi, personnellement, RTTI étendu donnait la possibilité de récupérer la convention d'appel à partir du pointeur de la méthode. Cependant, actuellement, ce code est soumis à une directive conditionnelle, car je ne suis pas satisfait.

(Les critiques et suggestions sur les solutions de rechange avec RTTI de base sont les bienvenues, cependant)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X