Lade...
 

Einleitung

Einleitung

In ClassiX® können eigene C++-Klassen integriert werden. Die dafür notwendigen

Werkzeuge enthält allerdings nur die Professional Edition. Dies betrifft neben ClassiX® selbst auch die Datenbank. Wenn eine neue Modellklasse eingeführt wird, sollen folgende

Ziele erreicht werden:

  1. InstantView® bekommt Zugang zu Daten und Methoden der Klasse.
  2. Mit InstantView®-Anweisungen können Instanzen der neu eingeführten Klasse erzeugt werden.
  3. Instanzen der neuen Klasse können in der Datenbank gespeichert werden.

Eine neu einzuführende Klasse muss von CX_CLASS abgeleitet und um einige Deklarationen ergänzt werden:

        class A : public CX_CLASS
        {
            // eigene Deklarationen
            . . .
            // InstantView® Interface
            GENERIC  DDI(A)   MDI(A)   // durch Makros generiert
        };

Möchte man unbedingt eine strikte Trennung der eigenen Klasse vom Interface zu InstantView®, so kann man Wrapper-Klassen einführen:

        class A  // eigene Klasse
        {   // eigene Deklarationen
            . . .
        };
        class WrapperA : public CX_CLASS, public A
        {
           GENERIC  DDI(WrapperA)   MDI(WrapperA)
        };

Auf diese Wiese kann man auch solche Klassen einbinden, von denen man keinen Source-Code besitzt. Zu den mit den obengenannten Makros generierten Deklarationen gehören Definitionen (Funktionen und Tabellen) in einem .CPP-File, die mit dem Utility CXGEND

erzeugt werden. Im einzelnen handelt es sich dabei um

  • ein Data Dictionary (DDI), das InstantView® den Zugriff auf die Daten der Klasse ermöglicht
  • ein Method Dictionary (MDI), das Funktionen der Klasse zugänglich macht
  • virtual functions GetDDI / GetMDI, die eine Instanz mit dem DDI / MDI seiner Klasse verbinden
  • static function New, die dann aufgerufen wird, wenn mit InstantView®-Anweisungen ein transientes oder persistentes Objekt erzeugt werden soll

CXGEND und die obengenannten Macros existieren nicht nur der bequemeren Schreibweise zu liebe. Sie sollen die Möglichkeit offen halten, darrunterliegende Schichten zu erweitern - z.B. für die Unterstützung weiterer (objektorientierter) Datenbanken und anderer Speicherungsformen. Es wird davon abgeraten, den entsprechenden C++-Code manuell zu

schreiben!

Ein Objekt kann nur dann persistent in des Datenbank gespeichert werden, wenn die Datenbank das Layout seiner Klasse kennt. Deshalb enthält die Professional Edition die Werkzeuge, mit denen ein neues Datenbankschema generiert wird. Der Objektmanager steuert, wo die Instanzen einer Klasse innerhalb der Datenbank gespeichert werden. Diese Information enthält das Initialisierungs-File CLASSIX.INI. Neue Klassen müssen dort eingetragen werden, und auch die DLL, welche die neu einzufügenden Klassen enthält, wird

dem Objektmanager über CLASSIX.INI bekannt gemacht.