Interface-Gene­rie­rung

LF‑ET bie­tet für C# auch die Möglichkeit, die Steuerlogik der Ent­schei­dungs­ta­belle über ein generiertes Interface von einer konkreten Implementierung zu entkoppeln.

Um die Interface-Gene­rie­rung zu verwenden, muss im Cs/C#-Prolog zur Ent­schei­dungs­ta­belle der Cs/C#-Gene­rie­rungs­para­me­ter $$InterfaceName definiert sein, z.B. // $$InterfaceName=ICompare oder // $$InterfaceName=I$$etname.

Zuerst wird das Interface ge­ne­riert:

  • Zu jedem Bedingungswert wird eine Methode definiert: bool IsBedingungsWert(), wobei die Methodennamen auto­ma­tisch aus der Ent­schei­dungs­ta­belle abgeleitet werden

  • Auch zu jedem Aktions­wert wird eine Methode definiert: void DoAktionsWert()

  • Jede Methode erhält auto­ma­tisch einen XML-Kommentar-Block (///), der aus allen verfügbaren Informationen aus der Ent­schei­dungs­ta­bellen (Titel, Symbole, Texte, etc.) zusammengestellt wird

  • Zu­sätz­lich wird noch für den Trace-Code eine Methode definiert: void DoTrace(string dtName, string version, int rules, int rule)

Anschließend wird die Klasse mit der eigentlichen Steuerlogik (Logik-Modul, IF-ELSE-Regelbaum) ge­ne­riert:

  • Die Klasse enthält nur eine Methode public void Execute(InterfaceName iface), der Name des Interface-Parameters iface kann bei Bedarf mit dem Cs/C#-Gene­rie­rungs­para­me­ter $$InterfaceVarName individuell angepasst werden

  • Der IF-ELSE-Regelbaum benutzt nur die im gene­rier­ten Interface definierten Methoden

Der Sinn dieser Gene­rie­rungs­art: Weder die Ent­schei­dungs­ta­belle, noch das gene­rier­te Interface, noch das gene­rier­te Logik-Modul enthalten anwendungsspezifischen Source­code!

Das bedeutet:

  • Maximale Entkopplung der Steuerlogik (d.h. Ent­schei­dungs­ta­belle) von einer konkreten Implementierung

  • Mehrere C#-Implementierungen derselben Logik sind möglich (z.B. in unter­schied­lichen Projekten), Basis für jede Implementierung ist immer das gene­rier­te Interface

Wenn Sie diesen Abschnitt mit LF‑ET durcharbeiten wollen, dann beachten Sie bitte die Tipps dazu in der Einleitung für Cs/C#.

Inhalt dieses Kapitels: