Das Regelmodul

LF-ET generiert aus der Entscheidungstabelle das Regelmodul als Klasse mit
-
einer 'execute-Methode', die als Übergabewert eine Implementierung des Interfaces erhält
-
einem 'IF-ELSE-Baum', dessen bestmögliche Struktur (d.h. die optimale Reihenfolge und Schachtelung der Bedingungen) bei jeder Generierung komplett neu berechnet wird
Der IF-ELSE-Baum arbeitet ausschließlich mit den Methoden des Interfaces.
7 Regeln ⇒ 7 Programm-Zweige
Die Entscheidungstabelle hat 7 Regeln, der IF-ELSE-Baum 7 exakt dazu passende logische Programm-Zweige:
// *** WARNING: DO NOT MODIFY *** This is a generated Java source code!
//
// Generated by LF-ET 2.4.1 (260219a), https://www.lohrfink.de/lfet
// From decision table
// "/src/main/resources/lfet/demo/Rechnungsbetrag.lfet"
// 24.02.2026 11:20
//
// Prolog Standard ---->
// profile LFET.Java.Prolog.Standard.Interface.Dt.ini not found
// used LF-ET 2.4.1 (260219a) build in default
package lfet.demo;
import javax.annotation.processing.Generated;
@Generated("LF-ET")
public class Rechnungsbetrag_rulesEngine
{
public void execute(Rechnungsbetrag_iFace iface)
{
// Prolog Standard <----
if (iface.isBestellwert_Kleiner2000())
{
// Rule R01 ---->
iface.doTrace("Rechnungsbetrag", "20260224.112051", 7, 1);
iface.doPortoBerechnen();
iface.doRechnungsbetrag_Akt();
// Rule R01 <----
}
else if (iface.isBestellwert_20007500())
{
if (iface.isRabatt_Groesser0())
{
if (iface.isRabattvariante_ProzentualerNachlassAufDenBestellwert())
{
// Rule R02 ---->
iface.doTrace("Rechnungsbetrag", "20260224.112051", 7, 2);
iface.doRabattBeruecksichtigen();
iface.doPortoBerechnen();
iface.doRechnungsbetrag_Akt();
// Rule R02 <----
}
else // Rabattvariante EUR - fester Betrag, wird von Bestellwert abgezogen
{
if (iface.isRabattKleinerBestellwert())
{
// Rule R03 ---->
iface.doTrace("Rechnungsbetrag", "20260224.112051", 7, 3);
iface.doRabattBeruecksichtigen();
iface.doPortoBerechnen();
iface.doRechnungsbetrag_Akt();
// Rule R03 <----
}
else // Rabatt < Bestellwert N - Nein
{
// Rule R04 ---->
iface.doTrace("Rechnungsbetrag", "20260224.112051", 7, 4);
iface.doPortoBerechnen();
iface.doRechnungsbetrag_Akt();
// Rule R04 <----
}
}
}
else // Rabatt ohne - es wurde kein Rabatt erfasst
{
// Rule R05 ---->
iface.doTrace("Rechnungsbetrag", "20260224.112051", 7, 5);
iface.doPortoBerechnen();
iface.doRechnungsbetrag_Akt();
// Rule R05 <----
}
}
else // Bestellwert > 75,00 - hoch
{
if (iface.isRabatt_Groesser0())
{
// Rule R06 ---->
iface.doTrace("Rechnungsbetrag", "20260224.112051", 7, 6);
iface.doRabattBeruecksichtigen();
iface.doRechnungsbetrag_Akt();
// Rule R06 <----
}
else // Rabatt ohne - es wurde kein Rabatt erfasst
{
// Rule R07 ---->
iface.doTrace("Rechnungsbetrag", "20260224.112051", 7, 7);
iface.doRechnungsbetrag_Uebern();
// Rule R07 <----
}
}
// Epilog Standard ---->
// profile LFET.Java.Epilog.Standard.Interface.Dt.ini not found
// used LF-ET 2.4.1 (260219a) build in default
}
}
// Epilog Standard <----
// End of generated Java source code
// Generated by LF-ET 2.4.1 (260219a), https://www.lohrfink.de/lfet
|
Der Trace-Code
}
else // Rabattvariante EUR - fester Betrag, wird von Bestellwert abgezogen
{
if (iface.isRabattKleinerBestellwert())
{
// Rule R03 ---->
iface.doTrace("Rechnungsbetrag", "20260224.112051", 7, 3);
iface.doRabattBeruecksichtigen();
iface.doPortoBerechnen();
iface.doRechnungsbetrag_Akt();
// Rule R03 <----
}
else // Rabatt < Bestellwert N - Nein
{
Der Trace-Code muss nicht verwendet werden, das wäre aber schade, denn der Nutzen ist enorm:
-
Automatisch immer perfekt positioniert
-
erstes Statement in jeder Regel
-
vor Ausführung der ersten Aktion
-
d.h. die Kombinatorik der Eingangswerte ‑ und damit die auszuführende Regel ‑ steht final fest
-
alle beteiligten Objekte sind noch im "unberührten" Zustand VOR der Verarbeitung durch die Regel
-
Beim Debuggen würde man das einen perfekten Break-Point nennen
-
-
Um das Verhalten der Software nachvollziehen zu können
-
genügen die Protokolle der Trace-Ausgaben
-
und die Entscheidungstabellen
-
niemand muss mehr Sourcecode lesen
-
auch Wiederholungsläufe zur Reproduktion und Analyse von Fehlverhalten sind in der Regel nicht mehr notwendig
-