Such mal nach der PHP Workflow Engine von Sebastian Bergmann, da definierst du deine Schritte durch Regeln und kannst so auch einfach welche überspringen.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Code wird zu komplex - Codedesign?
Einklappen
Neue Werbung 2019
Einklappen
X
-
Zitat von paddelboot Beitrag anzeigenDas größte Problem für mich ist, dass ich einen Kern-Code habe, der durch die ganzen Regeln und Spezialfälle aufgesplittert wird. Ich müsste stattdessen einen mehr oder weniger fest definierten (und abstrahierten) Kern-Code haben, den ich durch Regeln und Sonderfälle erweitern kann. Ein Template würde also nicht mehr durch include() geladen, sondern durch eine Funktion, die vor dem include noch prüfen müsste, ob irgendwelche Regeln registriert wurden. Nach diesem Schema müsste sich dann sämtliche Logik aufbauen lassen, also auch bei der Berechnung des Produkts usw.
Ich würde diese PHP Datei in 3 Dateien Kopieren und in jeder Datei einzeln den Step rausschmeißen. Dann hast du zb meineFormStep1.php meineFormStep2.php und meineFormStrep3.php und jede tut was anderes.
Anschließend empfehle ich dir PHPStorm zu nutzen, dieser hat ein "Compare with Clipboard" feature. Du kannst dann den Inhalt meineFormStep2.php kopieren und den Inhalt von meineFormStep1.php markeieren und dann vergleichen. Teile die Gleich sind würde ich in eine formFunctions.php erstmal auslagern.
Zitat von paddelboot Beitrag anzeigenDie Kunst dabei ist abzuschätzen *welche* Bausteine *wie* flexibel sein müssen.apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]
Kommentar
-
Zuletzt geändert von paddelboot; 23.01.2018, 15:51.Zitat von BlackScorp Beitrag anzeigenIch würde diese PHP Datei in 3 Dateien Kopieren und in jeder Datei einzeln den Step rausschmeißen. Dann hast du zb meineFormStep1.php meineFormStep2.php und meineFormStrep3.php und jede tut was anderes.
Edit: zum Thema Workflow-Engine habe ich einige interessante Dinge entdeckt;
https://www.infoworld.com/article/26...velopment.html
https://omniworkflow.com/ (für WordPress)
http://mamchenkov.net/wordpress/2017...kflows-in-php/
http://bpmn.io/
Doch ich sehe noch 2 Probleme:
a. Es ist immer noch nicht klar, was eine Workflow-Engine genau ist bzw. was sie in der Webentwicklung eigentlich nützt. Kann das jemand kurz & anschaulich erklären?
b. Steile Lernkurve, d.h. ein komplexes System implementieren, um einen komplexen Code in den Griff zu bekommen.
Kommentar
-
Zitat von paddelboot Beitrag anzeigen
Grundsätzlich ist das sinnvoll. Ich denke, ob man den Code in Klassen, Methoden oder Dateien (oder alles zusammen, so wie ich) aufteilt, hat am Ende einen ähnlichen Effekt. [...]
Ob du eine Workflow-Engine einsetzt oder nicht, das mag eine andere Diskussion sein. Der Symfony Form Builder ist z.B. auch sehr mächtig. Damit könntest du dynamisch Formulare generieren und die Daten generisch (z.B. als JSON) abspeichern. Die heutigen DB-Systeme können auch damit umgehen (JSON mittels "XPath" oder ähnlichen durchsuchen). Du kannst auch Voter, Event Subscriber und ähnliches einbauen, um je nach Input einen anderen Output (Zwischenschritt, ...) einzubauen. Validierung lässt sich auch sehr einfach erreichen und dynamisch generieren.
Oder, um eine ganz andere Ebene aufzugreifen (um vom Code wieder zum Prinzip zu kommen). Du könntest eine Process Engine einsetzen, die BPMN ausführen kann. Bei den meisten Process Engines lassen sich mittels REST Softwaresysteme anhängen, auf denen dann Aktionen ausgeführt werden können. Das hätte den Vorteil, dass du in BPMN all diese Fälle modellieren kannst. Signavio könnte hier ein mögliches Produkt sein.
[URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]
Kommentar
-
Hallo,
ich hätte dir auch zu der Symfony Form Komponente geraten, denn wie bereits erwähnt, bist du damit flexibel. Eine komplette grafische Workflow Engine, wo sich zum Beispiel der Kunde sein Formular anhand von Diagrammen modellieren kann, halte ich für übertrieben, bzw. für unbezahlbar für einen Kunden. Würden wir hier von einer Standardsoftware reden, die hunderte Kunden bedient, dann würde ich klar den Diagramm Workflow nehmen. Da es aber eher eine Einzelumsetzung ist, würde ich auf die Symfony Form Komponente setzen. Konfigurieren mit all deinen Regeln kann man das dann ja zum Beispiel mit einer JSON Datei oder Regeln aus einer Datenbank (Datenbankmodell mit mehreren Tabellen).
Was eine Workflow Engine ist, wird dir auch niemand genau erklären können. Das ist eine weitläufige Definition für ein Stück Software. Und je nachdem welche Engine du dir anschaust, können die auch verschiedene Dinge. Eine mir bekannte Engine durch Codeproject ist Wexflow. Nettes Tool, wenn man einen CRM Ablauf braucht...
PS: Für deinen Anwendungsfall dürfte auch das Container Pattern interessant sein und die damit verbundenen Services. Schonmal darüber nachgedacht deine Kern Klassen in Services auszulagern und so unabhängig zu gestalten?
MFG
derwunner
Kommentar
-
Zitat von derwunner Beitrag anzeigenHallo,
ich hätte dir auch zu der Symfony Form Komponente geraten, denn wie bereits erwähnt, bist du damit flexibel. Eine komplette grafische Workflow Engine, wo sich zum Beispiel der Kunde sein Formular anhand von Diagrammen modellieren kann, halte ich für übertrieben, bzw. für unbezahlbar für einen Kunden. Würden wir hier von einer Standardsoftware reden, die hunderte Kunden bedient, dann würde ich klar den Diagramm Workflow nehmen. Da es aber eher eine Einzelumsetzung ist, würde ich auf die Symfony Form Komponente setzen. Konfigurieren mit all deinen Regeln kann man das dann ja zum Beispiel mit einer JSON Datei oder Regeln aus einer Datenbank (Datenbankmodell mit mehreren Tabellen).
Was eine Workflow Engine ist, wird dir auch niemand genau erklären können. Das ist eine weitläufige Definition für ein Stück Software. Und je nachdem welche Engine du dir anschaust, können die auch verschiedene Dinge. Eine mir bekannte Engine durch Codeproject ist Wexflow. Nettes Tool, wenn man einen CRM Ablauf braucht...
PS: Für deinen Anwendungsfall dürfte auch das Container Pattern interessant sein und die damit verbundenen Services. Schonmal darüber nachgedacht deine Kern Klassen in Services auszulagern und so unabhängig zu gestalten?
MFG
derwunner
Verstehe nun auch ansatzweise, warum hier alle Workflow Engines erwähnen, aber es niemand erklären mag - wäre vermutlich ohnehin viel zu komplex geworden.
Kommentar
-
Zitat von paddelboot Beitrag anzeigen
Ich habe bisher noch kein einziges Framework für Formulare in PHP gesehen, das flexibel genug wäre, um wirklich alle Kundenwünsche zu ermöglichen. Normalerweise ist man immer irgendwo eingeschränkt in der Umsetzung. Pixelgenaues responsives dynamisch bestückbares duplizierbares AJAX-Select-Feld mit Tooltip? Das ist in meinen Projekten eine typische Anforderung, und das geht am Ende meist nur, wenn man den Code selber schreibt. Zumindest ist das meine Erfahrung.
Kommentar
-
Den Ansatz mit der Workflow-Engine halte ich auch für den richtigen Weg.
In Verbindung mit Form-Komponenten aus Frameworks, eventuell. Zumindest meine Kollegen haben damit gute Erfahrungen gemacht, es muss aber auch zu den Anforderungen passen, da gebe ich dir Recht.
Dabei ginge es dann darum zu definieren in welchem Fall ein Formular-Element X angezeigt werden soll.
Als Beispiel aus meinem Browsergame:
Bei der Charaktererstellung gibt es verschiedene Stufen.
1. Personendaten
2. Vorteile und Nachteile wählen
3. Fraktion wählen
4. Klasse wählen
5. Klassenspezifische Attribute wählen
Die Voraussetzungen um zur nächsten Stufe sind straight forward, "du musst auf dieser Seite alles ausfüllen".
Aber beim "weiter" gehen wird im Hintergrund dann ausgewählt was für Optionen dem User als nächstes zur Verfügung stehen.
- wenn man bei den Personendaten sagt der Charakter ist 17 Jahre alt bekommt man nicht angezeigt, dass es einen Vorteil "Altersweisheit" gibt
- wenn man als Herkunft Asien angibt bekommt man keine Klassen angezeigt die einen strikt europäischen oder amerikanischen Sitz haben
- wenn man als Nachteil "bettelarm" auswählt kann man keine Klasse wählen die von Natur aus reich ist
- als Fraktion "normaler Mensch" kann man keine klassenspezifischen Attribute für Magier auswählen, oder nur in geringerer Ausprägung
...
Hinter so etwas muss nichtmal eine umfangreiche oder komplizierte Engine stehen (oben beschriebenes ist sehr simpel), du musst nur die Voraussetzungen und Reihenfolgen definieren und die bisherigen Eingaben entsprechend auswerten.[COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
[URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]
Kommentar
-
Zuletzt geändert von paddelboot; 07.02.2018, 12:18.Zitat von derwunner Beitrag anzeigen
Pixelgenaues responsive Design ist CSS Sache, damit hat erstmal das Formular selbst nichts zu tun. Aber auch hier bietet Symfony viele Möglichkeiten das Formular schon semantisch halbwegs so zu gestalten, wie man es am besten braucht. Natürlich ist die Komponente um eigene Späße erweiterbar. Hier stehts eigentlich schon wie es geht (einfach eigene Klasse für die UI Komponente anlegen): https://symfony.com/doc/current/comp...-a-simple-form
Ich finde Frameworks toll, deshalb arbeite ich ja auch seit Jahren damit, sei es im Frontend- oder Backendbereich. Wenn ich also für einen bestimmten Anwendungsfall auf ein Framework verzichte, ist es deshalb, weil das Wort "Frame"work bereits die Limitierung anzeigt; man muss nämlich immer innerhalb eines gewissen "Rahmens" entwickeln, auch wenn er bei sehr guten Frameworks noch so weit gezogen ist. Je spezifischer die Anforderungen, desto schneller stößt man an die Grenzen von modular vorgefertigtem Code. Bei Projekten, wo die Komplexität erwartungsgemäß durch die Decke geht, schätze ich normalerweise die Freiheit und Flexibilität von eigenem Code. Meine Frage war also nicht, welches Framework ich verwenden kann oder soll, sondern wie ich meinen selbstgeschriebenen Code strukturieren könnte.
Kommentar
-
Zitat von paddelboot Beitrag anzeigenIch finde Frameworks toll, deshalb arbeite ich ja auch seit Jahren damit, sei es im Frontend- oder Backendbereich. Wenn ich also für einen bestimmten Anwendungsfall auf ein Framework verzichte, ist es deshalb, weil das Wort "Frame"work bereits die Limitierung anzeigt; man muss nämlich immer innerhalb eines gewissen "Rahmens" entwickeln, auch wenn er bei sehr guten Frameworks noch so weit gezogen ist. Je spezifischer die Anforderungen, desto schneller stößt man an die Grenzen von modular vorgefertigtem Code. Bei Projekten, wo die Komplexität erwartungsgemäß durch die Decke geht, schätze ich normalerweise die Freiheit und Flexibilität von eigenem Code.
Außerdem zu sagen, dass einem die HTML Struktur eines Frameworks bei der responsive Anpassung stören würde, ist in meinen Augen nur eine müde Ausrede... Man kann diese schließlich ebenfalls auf seine Bedürfnisse anpassen. Und ich denke nicht, dass du mit was eigens gebasteltem schneller bist, als eine vorhandene minimal auf deine Bedürfnisse anzupassen.
Kommentar
-
Zitat von paddelboot Beitrag anzeigenMeine Frage war also nicht, welches Framework ich verwenden kann oder soll, sondern wie ich meinen selbstgeschriebenen Code strukturieren könnte.[SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]
Kommentar
-
Zitat von paddelboot Beitrag anzeigen(..) Meine Frage war also nicht, welches Framework ich verwenden kann oder soll, sondern wie ich meinen selbstgeschriebenen Code strukturieren könnte.
Oder ist das dann auch zu eng ?
Kommentar
-
Zitat von paddelboot Beitrag anzeigen[...]
Ich habe noch kein Framework gesehen, das mir in der visuellen Umsetzung 100% Freiheit lässt, und daher ist es eben nicht nur eine CSS-Sache. Layoutgestaltung fängt mit dem DOM/HTML an, und das wird serverseitig erzeugt, sprich: durch das Framework.
[...][URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]
Kommentar
-
Zuletzt geändert von paddelboot; 11.02.2018, 02:51.Zitat von lottikarotti Beitrag anzeigenHast du denn bereits die Anforderungen definiert oder ein grobes Konzept?
Zitat von BLU Beitrag anzeigenHallo,
und wenn du das Formular on the fly erstellst? So dass in einem Fall vier und in einem anderen nur drei Schritte vorhanden sind?! So liefert das Backend jeweils ein Formular zurück, das auf deine Anforderungen und für die ausgewählten Formulareinstellungen passt.
Kommentar
Kommentar