Ich arbeite auf einer bescheidenen Website mit meinen mittelmäßigen, autodidaktischen PHP-Fähigkeiten, und die aktuelle Struktur der Benutzeroberfläche ist wie folgt:
%Vor%Das funktionierte zunächst gut und schien ziemlich gut organisiert zu sein, aber die erforderliche Funktionalität ist um den Faktor 10 gewachsen und es entwickelt sich schnell zu einem nicht zu behaltenden, peinlichen Durcheinander und ich weiß nicht, wie ich daraus herauskommen soll / p>
Ich fühle, dass die Funktionen, die für jede Situation aufgerufen werden, ziemlich gut geschrieben und fokussiert sind, aber ich weiß nicht, wie ich mit dem Mittelschritt zwischen dem Benutzer und den Funktionen umgehen soll, die das Layout erstellen und die Rückgabe verarbeiten.
Ich habe das Gefühl, dass MVC eine Lösung ist? Aber es fällt mir schwer zu begreifen, wie ich von hier nach dort gehen kann ...
Ich entschuldige mich für irgendwelche Kopfschmerzen oder unangenehme Erinnerungen, die der obige Code möglicherweise verursacht haben könnte. Danke für deine Zeit.
Sie scheinen den Weg vieler Leute gegangen zu sein, eine große Wenn- und / oder Fall-Aussage, die weiter wächst. All diese "Wenn" -Kontrollen können Zeit brauchen. MVC ist definitiv ein guter Weg zu gehen, aber es gibt so viele Möglichkeiten, es zu implementieren. Ich würde auch empfehlen, auf das Designmuster der Front Controller zu schauen, das häufig mit MVC verwendet wird.
Eine Möglichkeit, Ihre Vorgehensweise zu ändern, besteht darin, mit einem assoziativen Array zu einer definierten Liste von "Aktionen" zu wechseln. Und ändern Sie Ihre Funktionen in Includes. Dann können Sie mehrere Funktionen, Variablen und anderen Verarbeitungscode haben.
%Vor%Dann ist Ihre "Index" -Datei nur ein Routing-Tool, das ist ziemlich das Front-Controller-Konzept.
In jedem objektorientierten Code wird, wann immer Sie eine Reihe von if / else- oder case-Anweisungen sehen, diese oft besser von einer Objekthierarchie gehandhabt als von einem Haufen wenn if / else / else.
In Ihrem speziellen Fall könnten Sie stattdessen 3 verschiedene Klassen für A, B und C haben. Rufen Sie einfach eine einzige $ obj- & gt; doit () Methode auf. A, B und C hätten jeweils unterschiedliche Implementierungen der doit () - Methode.
Wenn Sie aus Ihrer Furche herauskommen wollen, empfehle ich Ihnen, ein Buch über Designmuster zu lesen. Hier sind einige Beispiele für Entwurfsmuster in PHP: Ссылка
Muster, die für diesen speziellen Problemtyp von besonderem Interesse sein könnten, sind:
Beschreibungen dieser Muster mit PHP-Beispielen finden Sie unter dem obigen Link. Ich empfehle, mehr über Designmuster an anderer Stelle zu lesen, aber dieser Link enthält PHP-Beispiele.
Ich benutze routinemäßig die drei von diesen zusammen, um Code in Situationen, die ähnlich oder identisch mit dem sind, was Sie beschreiben, sauber zu organisieren. Es funktioniert so: - Strategie. Das ist wie ein Cookie-Cutter oder Mad Libs Stil. Sie legen die Grundlagen für die Ausführung einer Funktion fest. Der Benutzer (der Programmierer, der die Basisklasse verwendet) kann bestimmte Dinge überschreiben, wenn es nötig ist, aber die Grundlagen für die Arbeit sind alle vorhanden. Beispiel: Wir müssen einen Geschäftsprozess durchführen. Im Allgemeinen beinhaltet das das Starten einer Transaktion, das "Fleisch" der Arbeit, dann das Säubern und Protokollieren. Overkill scheint hier vielleicht ein Stragegy / Cookie-Cutter-Muster zu sein, aber es ist oft nicht: Sie müssen daran denken, die Bereinigung durchzuführen, auch wenn ein Fehler oder eine Ausnahme in das "Fleisch" des Codes geworfen wurde. Mit dem Strategie / Cookie-Cutter-Muster können Sie alles mit minimalem Standardcode / wiederholtem Code durchführen.
Befehl: Kombiniert mit den Ideen des oben erwähnten Strategie-Patterns, haben Sie in Ihren Funktionen, die die eigentliche Arbeit erledigen, weniger Vortex-Code.
Fabrik. Sie verwenden eine Factory-Methode, um den entsprechenden Befehl für die Situation zu generieren, mit der Sie konfrontiert sind.
Diese drei Designmuster funktionieren sehr gut für diese Art von Situation und können zu einem sehr sauberen Code führen, wo Sie sich nie wiederholen.
maschka unten empfohlen mit Smarty, das ist eine vernünftige Idee. Eine bessere Idee, abhängig von Ihrer Anwendung, könnte sein, ein MVC-Framework zu verwenden. Wenn Sie die Idee haben, bei PHP zu bleiben, dann empfehle ich CakePHP und hatte großen Erfolg damit. Es hilft Ihnen, Ihren Code sehr gut auszulegen und Ihnen zu helfen, Probleme zu vermeiden.
Tags und Links php code-organization