2010-04-17 6 views
19

Ich habe eine great explanation about the new RTTI in Delphi gefunden, aber ich verstehe keine wichtige Sache über alles, was ich gelesen habe - Wo kann ich das verwenden?Praktische Anwendung für Delphi's neue RTTI - Attribute, Werte

Was soll es ersetzen?

+0

Ich werde Ihre Frage +1, wenn Sie einen Link zu der großen Erklärung, über die Sie sprechen ... –

+1

Hier: http://robstechcorner.blogspot.com/2009/09/so-what-is- rtti-rtti-is-acronym-for-run.html Der "praktische Gebrauch" Führer ist noch nicht geschrieben. Deshalb fragte ich. –

Antwort

20

Die erweiterte RTTI funktioniert wie Reflection in .NET. Sie erhalten Zugriff auf Ihre internen Informationen zur Anwendungsstruktur. Sie können auf Klasseneigenschaften, Methoden usw. zur Laufzeit zugreifen, soweit Sie es vorher nicht konnten.

Einige Möglichkeiten, es zu benutzen:

  1. Serialisierung/Deserialisierung von Klassen in XML oder anderen Medien
  2. Mapping von Objekten zu Datenbanken. ORM.
  3. Klonierung von Objekten
  4. dynamischer Aufruf von Methoden zur Laufzeit
  5. „Scanning“ des Objekts und wirkt, dass nach.
  6. Einfachere Entwicklung von „Plug-in“ Typ Systemen

Es wahrscheinlich, wo eine Menge von Szenarien ist es vorteilhaft wäre, es zu benutzen. Kurz gesagt, es fügt Ihrer Anwendung einen dynamischen Aspekt hinzu. Ihr Produkt ist in der Lage, einige Dinge zur Laufzeit und effizienter zu tun, als alles zur Designzeit zu entwerfen. Es ist keine Wunderwaffe und viele Menschen werden es nie benutzen. Aber einige Designmuster oder einige Probleme einfach nicht gelöst werden (zumindest nicht in effizienter Art und Weise), ohne die Verwendung des neuen RTTI

+3

Lassen Sie mich das hinzufügen ... es wird hauptsächlich von Framework-Designern oder Komponenten-Autoren verwendet werden. Zum Beispiel können Sie einen Blick auf DeHL werfen, die diese Funktion zum Bereitstellen von XML-Serialisierung für Programmierer verwendet. – vcldeveloper

5

Ein Beispiel, in dem erweiterten RTTI nützlich sein könnte:

Bis heute bilden Eigenschaften musste be veröffentlicht, weil diese Sichtbarkeit erforderlich war, um Delphi-Formulardateien (dfm) zu serialisieren/deserialisieren.

Mit erweiterter RTTI könnte Delphi eine neue Streaming-Schicht verwenden, die dieses hohe Maß an Sichtbarkeit nicht erfordert. Natürlich ist dies nur eine Idee, aber in der Praxis haben Sie den Vorteil, dass alle Komponenten in einem Formular private oder geschützt sein können. Dies würde mehr OOP (Kapselung) sein und das "Rauschen" eliminieren, das durch Dutzende irrelevanter Einträge in der Liste von Formularfeldern/Eigenschaften verursacht wird, die von außen sichtbar sind.


Ein weiterer typischer Anwendungsfall für erweiterte RTTI sind Inversion of Control und Dependency Injection Frameworks.

Zum Beispiel erfordert das Delphi Delphi Spring Framework Delphi 2010 (oder höher) wegen seiner starken Nutzung von RTTI, die für constructor injection verwendet werden kann.

+1

+1 für Komponenten im geschützten (nicht privaten) Abschnitt. –

+0

@Daniele: meine Antwort bearbeitet, danke für den Hinweis – mjn