Frank: Trigger/Action/Hook Konzept ?

Guten Morgen,

ich suche nach einer Lösung, einen Ansatz oder entsprechende Fachbegriffe, um folgende Situation abzubilden (Beispiel): In einem WebShop werden bei einem Produkt Aktionen hinterlegt für "Bestand < 10" und "Bestellung ausgelöst". Bei jeder der beiden Aktionen oder Zustände sollen 1-x Aktionen durchgeführt werden. Zum Beispiel beim Auslösen der Bestellung soll der Bestand entsprechend reduziert werden und dann eine Bestellbestätigungsmail versandt werden. Ist der Bestand bereits 0, soll eine Storno-Mail versendet werden.

Im Prinzip ist es eine Verlagerung von PHP-Routinen in eine DB. Die Routinen sind eine Art Bausteine, die beliebig kombiniert werden können.

Wie nennt man ein solches System? Kennt ihr Beispiele, die man sich anschauen könnte ohne alles von Null an neu zu erfinden?

Gruß, Frank

  1. Transaktion. Eine Folge von Operationen die nur komplett oder gar nicht ausgeführt werden.

  2. Du willst Mails direkt aus dem DBMS verschicken?

    1. Du willst Mails direkt aus dem DBMS verschicken?

      Hallo chorn,

      nein, nicht aus dem DBMS. Ich möchte den Benutzern des WebPortals ermöglichen eigene Aktionen bei gewissen Ereignissen bei Produkten zu hinterlegen. Im Prinzip ist es dann wie eine eigene Programmiersprache, welche bestehende PHP-Funktionen mit Parametern in definierter Reihenfolge aufruft. Trigger in der DB kommen deshalb nicht in Frage, da sie in der DB ausgeführt werden und keinen Zugriff auf den Benutzer des WebPortals haben, bzw. diesen identifizieren können. Transaktionen sind meines Wissens nach dazu da, gewisse Aktionen in einer DB ganz oder gar nicht auszuführen. Also, um im Fehlerfall die gesamten bereits durchgeführten Aktionen rückgängig machen zu können.

      Gruß, Frank

      1. Moin,

        Im Prinzip ist es dann wie eine eigene Programmiersprache, welche bestehende PHP-Funktionen mit Parametern in definierter Reihenfolge aufruft.

        Eigene Programmiersprache? ich denke das ist bissl übertrieben. Du suchst einfach ein System/Programm dass einer entsprechenden Logik folgt. Was du tun kannst, sind Funktionen/Prozeduren mit einem gewissen Teil Logik und entsprechenden Rückgaben in der DB zu hinterlegen. Die Auswertung der Ergebnisse, oder des Rückgabewertes, muss dann schon das Programm übernehmen (z.B. Mail senden).

        für MySQL findest du hier entsprechende Infos zu Prozeduren.

        Gruß Bobby

        --
        -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <- ### Henry L. Mencken ### -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <- ### Viktor Frankl ### ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
  3. Was Du da beschreibst, ist eine Form der deklarativen Programmierung. Du definierst Regeln und Aktionen, und ein Runtime-System arbeitet bei jeder Aktivität im Shop die Regeln ab. Ist eine Regel wahr, werden die anhängenden Aktionen ausgelöst.

    Das Verarbeiten der Aktionen bedeutet wiederum Aktivität im Shop, was dazu führt, dass die Regeln geprüft werden müssen, und wieder Aktionen getriggert werden. Ad infinitum, wenn man einen Fehler macht...

    Sowas habe ich bei Expertensystemen schon mal gesehen. Es gibt Regeln, Aktionen, und eine Inferenzmaschine, die daraus die erforderlichen Abläufe bestimmt und ausführt.

    Ob es fertige Shops gibt, die so ein Bausteinsystem unterstützen, weiß ich nicht. Es sei denn, der Webshop war ein abstraktes Beispiel und Du willst in Wahrheit was ganz anderes bauen.

    Um es selbst zu bauen, brauchst Du eine Möglichkeit, deine Regeln und Aktionen so in der DB zu speichern, dass Du sie SICHER interpretieren kannst. Das kannst Du so machen, dass Du Regeln vordefinierst und in der DB nur den Namen der Regel sowie ggf. Parameterwerte speicherst. Z.B. (RegelId=815, Produkt=4711, Regel="PrüfeBestandSchwelle", Parameter1="10", Priorität=1). Die Priorität ist wichtig, ggf. müssen manche Regeln vor anderen beachtet werden. Für jede Regel-ID gibt es dann 1-N Einträge in der Aktionen-Tabelle; ebenfalls per Aktionsname, Parametern und Priorität. Die Aktionen zu den Namen hältst Du dann wieder fertig ausprogrammiert bereit. Für sowas bieten sich Familien aus Klassen an, die ein gemeinsames Regel- oder Aktions-Interface haben.

    Das Ganze ist aber nicht trivial, z.B. deine Bestellbestätigung oder Storno-Mail sollte ja nur einmal rausgehen und bei 5 bestellten oder stornierten Produkten nicht fünfmal. D.h. Du brauchst auch ggf. so etwas wie ein Gedächtnis (=Variablen im Regelinterpreter).

    Rolf