Prozess in einer Datenbank abbilden

  • Guten Morgen :)


    Also, folgendes Problem, bzw. ich hab folgende Aufgabe.


    Ich soll mittels PHP und MySQL eine "Versionsverwaltung" programmieren. Diese Software soll im Nachhinein aber noch um andere Prozesse erweiterbar sein.


    Dazu muß ich erklären das die Software einen Freigabeprozess durchläuft, der durch die Versionsverwaltung dargestellt wird. Dieser Prozess besteht aus 3 Schritten. Erstellen->Freigabe->Freigabe.


    Bedingung für die spätere Erweiterbarkeit ist, dass der PHP Code von jeglichen Änderungen unangetastet bleibt um weitere Module einfacher einbinden zu können. Daraus folgt -> Der Prozess muß durch die Datenbank abgebildet werden.


    Das bedeutet der PHP Code ist so allgemein wie möglich und bezieht die Daten nur aus der DB.


    Wenn ich das System also zu einem späteren Zeitpunkt erweitern wollte, müsste ich den neuen Prozess mit X Schritten nur in die DB eintragen und schon wäre er implementiert und es müssten nur noch die benötigten Formulare dazu gestaltet werden.


    Die Frage ist nur, wie mache ich das? Habe mir jetzt schon 2 Tage den Kopf zerbrochen aber bin noch nicht zu einer Lösung gekommen. :confused:


    Ich hoff ich hab mich verständlich genug ausgedrückt, ansonsten fragt nach. :)

  • Hab jetzt mal nen bisschen weitergedacht und bin zu folgendem gekommen.


    Um nachher nichts mehr am Code machen zu müssen, müsste ich quasi alle Daten eines Prozesses in der Datenbank ablegen, so das PHP/HTML das ganze nur noch rendert und anzeigt.


    Bedeutet -> Ich muß alle Farben, Formulardaten und sonstiges, assoziiert mit dem Prozess natürlich, in der Datenbank ablegen, so das das Script dann nur noch die Daten holt und danach dann die Seitena aufbaut.


    Gut, damit ist das Problem schonmal eingegrenzt, aber immernoch da. Nämlich wie bilde ich jetzt den Prozess in der Datenbank ab?


    Also das "Erstellen->Freigabe->Freigabe" bei dem Versionsverwaltungsmodul zum Beispiel und wie bilde ich dann auch andere Prozesse ab, mit zum Beispiel mehr Schritten und anderen "Aktionen"?


    Ich bin echt für jede Hilfe dankbar.

  • Regel 1: Komplexität reduzieren
    Regel 2: Aufgabe rekursiv in kleinere Teilaufgaben zerlegen, bis es bewältigbare Stückchen sind.


    Zitat

    Original geschrieben von DADAMAN
    Ich soll mittels PHP und MySQL eine "Versionsverwaltung" programmieren. Diese Software soll im Nachhinein aber noch um andere Prozesse erweiterbar sein.


    Das Wort Prozess wird in der Umgangssprache für zahlreiche verschiedene Sachen verwendet, du solltest versuchen festzulegen was mit einem Prozeß in diesem Zusammenhang gemeint ist. Was genau willst du abbilden? Welche Teile sind davon betroffen? usw.


    In erster Linie geht es vor allem darum einzuschränken. Man bekommt gerne mal Aufgaben wie ein möglichst flexibles System zu schreiben, das sich ohne Änderungen in jede erdenklichen Art und Weise anpassen lassen soll, das ist aber a) seltenst tatsächlich was benötigt wird und b) meistens viel zu teuer, aufwendig und komplex, als das es irgendjemand bezahlen oder benutzen möchte - und natürlich muß dann für die Änderungen die nachher tatsächlich benötigt werden, trotzdem noch der Code angepaßt werden.


    Das wichtigste für dich dürfte sein, den richtigen Weg zu finden das zu kommunizieren. Das ist insbesondere dann schwierig, wenn es sich um (Entiwcklungs-)Unerfahrene Leute handelt.


    Zitat

    Dazu muß ich erklären das die Software einen Freigabeprozess durchläuft, der durch die Versionsverwaltung dargestellt wird. Dieser Prozess besteht aus 3 Schritten. Erstellen->Freigabe->Freigabe.


    Dann brauchst du bis hierher im Prinzip nur ein einzelnes Meta-Datum zu dem Objekt was versioniert wird: den Status. Falls die Objekte um die es geht ebenfalls in der Datenbank gespeichert werden, kannst du die jeweilige Tabelle um ein Feld erweitern, und dort einen Quer-Verweis speichern zu einer zweiten Tabelle, welche die möglichen Zustände enthält. Wenn du Zustände nur in eine Richtung durchlaufen werden können sollen, dann kannst du zu den Zuständen ebenfalls noch weitere Informationen ablegen (bspw. alle möglichen Folgezustände).


    Du erwähnst es zwar nicht explizit, aber vermutlich wirst du auch die Historie jeden Objekts speichern wollen, also wann er welche Zustandsänderungen durchgemacht hat.


    Außerdem bleibt auch die Frage nach Benutzerverwaltung ungeklärt, darf jeder alles, oder gibt es verschiedene Berechtigungsgruppen?


    Zitat

    Bedingung für die spätere Erweiterbarkeit ist, dass der PHP Code von jeglichen Änderungen unangetastet bleibt um weitere Module einfacher einbinden zu können. Daraus folgt -> Der Prozess muß durch die Datenbank abgebildet werden.


    Kommen später nur neue Zustände hinzu, oder soll es in jede Richtung änderbar bleiben? Welche "Module" sind gemeint? Wie gesagt, allgemein erweiterbar in jede denkbare Richtung ist eine unrealistische Aufgabenstellung.


    Zitat

    Wenn ich das System also zu einem späteren Zeitpunkt erweitern wollte, müsste ich den neuen Prozess mit X Schritten nur in die DB eintragen und schon wäre er implementiert und es müssten nur noch die benötigten Formulare dazu gestaltet werden.


    Wie gesagt, mußt du ersteinmal eine klarere Vorstellung davon bekommen was ein "Prozeß" in deinem konkreten Fall ist. Sehr hilfreich sind auch Papierprototypen, in denen du einfach mal die Benutzermasken und deren Abfolge auf Papier bringst, und mögliche Abläufe simulierst.


    Zitat

    Die Frage ist nur, wie mache ich das? Habe mir jetzt schon 2 Tage den Kopf zerbrochen aber bin noch nicht zu einer Lösung gekommen.


    Programmier doch einfach erst mal ein paar schnelle Prototypen die so gerade das nötigste machen, und versuch von dort konkret Schritt für Schritt jede "Dimension" in die es flexibel sein muß nach und nach einzupflegen, durch reines nachdenken, wirst du (insbesondere als Anfänger keine Lösung finden.

    "That's not a hair question. I'm sorry." - 01/31/07 - Never forget!

  • Zitat

    Original geschrieben von Sencer
    Das Wort Prozess wird in der Umgangssprache für zahlreiche verschiedene Sachen verwendet, du solltest versuchen festzulegen was mit einem Prozeß in diesem Zusammenhang gemeint ist. Was genau willst du abbilden? Welche Teile sind davon betroffen? usw.


    In erster Linie geht es vor allem darum einzuschränken. Man bekommt gerne mal Aufgaben wie ein möglichst flexibles System zu schreiben, das sich ohne Änderungen in jede erdenklichen Art und Weise anpassen lassen soll, das ist aber a) seltenst tatsächlich was benötigt wird und b) meistens viel zu teuer, aufwendig und komplex, als das es irgendjemand bezahlen oder benutzen möchte - und natürlich muß dann für die Änderungen die nachher tatsächlich benötigt werden, trotzdem noch der Code angepaßt werden.


    Das wichtigste für dich dürfte sein, den richtigen Weg zu finden das zu kommunizieren. Das ist insbesondere dann schwierig, wenn es sich um (Entiwcklungs-)Unerfahrene Leute handelt.


    Mit "Prozess" sind verschiedene betriebliche Prozesse gemeint. Das Beispiel in diesem Fall ist eine Versionsänderung.
    Es gibt eine neue Version, ein Formular wird angelegt und in der DB gespeichert, ein Verantwortlicher bekommt eine E-Mail über den Vorgang und er muß eine Freigabe erteilen. Ist sie erteilt, bekommt der nächste Verantwortliche eine E-Mail und auch er muß die Änderung freigeben.


    Und das System soll dann später mit möglichst wenig Aufwand um weitere Prozesse erweiterbar sein, die ähnlich aufgebaut sind, aber unterschiedlich lang sein können. Der Prototyp für den Prozess würde wahrscheinlich so aussehen -> "Ereignis -> Entscheidung -> Ereignis -> Entscheidung"
    Und immer so weiter.


    Zitat

    Dann brauchst du bis hierher im Prinzip nur ein einzelnes Meta-Datum zu dem Objekt was versioniert wird: den Status. Falls die Objekte um die es geht ebenfalls in der Datenbank gespeichert werden, kannst du die jeweilige Tabelle um ein Feld erweitern, und dort einen Quer-Verweis speichern zu einer zweiten Tabelle, welche die möglichen Zustände enthält. Wenn du Zustände nur in eine Richtung durchlaufen werden können sollen, dann kannst du zu den Zuständen ebenfalls noch weitere Informationen ablegen (bspw. alle möglichen Folgezustände).


    Ja daran hab ich schon gedacht und so wird das wohl auch ablaufen.


    Zitat

    Du erwähnst es zwar nicht explizit, aber vermutlich wirst du auch die Historie jeden Objekts speichern wollen, also wann er welche Zustandsänderungen durchgemacht hat.


    Außerdem bleibt auch die Frage nach Benutzerverwaltung ungeklärt, darf jeder alles, oder gibt es verschiedene Berechtigungsgruppen?


    Ja das will ich in der Tat. :) Und das ist denke ich auch nicht schwer umzusetzen.


    Generell werden alle Benutzer die gleichen Rechte haben. Noch unklar ist ob die Benutzerverwaltung über die DB ablaufen wird oder über die Kommunikation mit LDAP.


    Zitat

    Kommen später nur neue Zustände hinzu, oder soll es in jede Richtung änderbar bleiben? Welche "Module" sind gemeint? Wie gesagt, allgemein erweiterbar in jede denkbare Richtung ist eine unrealistische Aufgabenstellung.


    Wie gesagt, mußt du ersteinmal eine klarere Vorstellung davon bekommen was ein "Prozeß" in deinem konkreten Fall ist. Sehr hilfreich sind auch Papierprototypen, in denen du einfach mal die Benutzermasken und deren Abfolge auf Papier bringst, und mögliche Abläufe simulierst.


    Wie bereits oben erwähnt, werden die Prozesse ähnlich aufgebaut sein, also in etwa das gleiche Schema haben, nur mit mehr oder weniger Schritten und anderen "Entscheidungen". Deshalb war der Grundgedanke auch, dass das System um weitere Prozesse, ohne Code-Anpassung, erweiterbar sein soll, da sie sich im Grunde sehr ähneln.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!