Wie implementiere ich MVC Style auf meinem PHP / SQL / HTML / CSS Code?

8

Ich habe ein Programm zur Visualisierung einiger Daten entwickelt. Mein Programm nimmt spezifische Eingaben von einer MySQL-Datenbank und zeichnet einige Graphen (libchart-Bibliothek), erstellt einige Tabellen usw.

Mein Problem ist, dass es gerade eine Code-Hölle ist. Ich habe rund 7 PHP-Dateien (Index, Grafik-Seite, Galerie, etc.) mit HTML / CSS und PHP / SQL-Code alle zusammen (einige von ihnen haben nur die PHP-Erweiterung, aber nur HTML im Inneren). Ich habe kein Problem, das Projekt vorläufig zu lesen und zu verstehen, aber wenn jemand anderes versucht hat, könnte es Kopfschmerzen geben. Außerdem ist eine fortlaufende Programmierung nicht praktikabel, da das Projekt in Zukunft möglicherweise nicht einfach skalierbar ist.

Haben Sie Vorschläge, wie Sie HTML / CSS erfolgreich von PHP / SQL trennen können? Ich möchte kein Framework verwenden, da ich nichts mache, was Benutzereingabe, Sitzungsbehandlung usw. erfordert. Ich führe nur einige Abfragen aus und visualisiere die Ergebnisse. Ich spreche hier hauptsächlich über Architektur und, falls vorhanden, vielleicht ein Skript, das mir hilft (ich habe über Smarty gelesen, bin mir aber nicht sicher, ob ich das brauche).

    
Ion 27.12.2011, 15:26
quelle

2 Antworten

19
  

Haben Sie Vorschläge, wie Sie HTML / CSS erfolgreich von PHP / SQL trennen können?

Glückwunsch, dass Sie schauen, wie Sie den Code verbessern können. Das ist die Voraussetzung, Sie müssen es verbessern wollen und das Thema ist lang. Dein Wille ist also entscheidend.

Ich fange leicht an und versuche dann, ein paar Tipps zu geben. Da dir die Erfahrung fehlt, suche zunächst nach einem Punkt, ganz sicher nach dem letzten der folgenden Liste. Aber das Wichtigste zuerst:

Um etwas voneinander zu trennen, benötigen Sie einen Code, der trennt:

%Vor%

Das Trennzeichen hier ist eigentlich auch PHP-Code, aber ich denke, Sie bekommen die Idee.

Wie Sie sehen können, spricht nur das Trennzeichen mit HTML / CSS und PHP / SQL .

Also müssen HTML / CSS und PHP / SQL eine Schnittstelle mit Trennzeichen (die Zeile dazwischen) haben, damit dies funktioniert.

Normalerweise geben Sie in einem Programm Daten weiter, die verarbeitet werden. Die Daten sind ziemlich dynamisch und können eine komplexe Komplexität aufweisen, besonders wenn Sie Daten an eine Ausgabe-Routine übergeben, die sie korrekt formatieren sollte.

Es gibt mehrere Möglichkeiten, wie ein solches Trennzeichen (oder mehrere davon) geschrieben werden kann. Sie können layer Ihre Software verwenden oder Komponenten bereitstellen, die Dinge in ihrem Bereich oder Domain tun. Z.B. Sie haben eine Datenbankschicht oder Datenbankkomponente , die sich um die Interaktion mit der Datenbank kümmert.

Oder Sie haben eine Template-Engine , die dafür sorgt, dass Ihre Strings und Arrays in lesbarem HTML-Code gespeichert werden.

Kurz gesagt, das ist die Pasta-Theorie des Software-Designs:

  • Spaghetti Code - alles in einem, Code ist stark verwoben, bevorzugt mit Bolognese oder Aglio, Olio e Peperoncino.
  • Lasagne-Code - Layered, eine Ebene hat zwei andere Ebenen, mit denen sie interagiert (außer unten oder oben), immer mit Béchamelsauce.
  • Tortelini-Code - Kleine Komponenten, die einfach ihre Arbeit machen, sie haben Fleisch oder würziges Gemüse darin.

Wenn wir in unserem Leben verschiedene Nudeln essen, müssen wir beim Programmieren auch mit all diesen verschiedenen Arten von Code umgehen und entwickeln im Laufe der Zeit unseren eigenen Lieblingsgeschmack. Als Kind werden wir füttern, aber im Laufe der Zeit beginnen wir, etwas Eigenes zu kochen und die Rezepte zu variieren.

Also ich denke, es ist ein guter Punkt, den Sie jetzt einfach nicht essen wollen MVC Framework X mit viel genial für die nächsten Wochen nur, weil jemand Ihnen sagte, es ist die Art zu essen jetzt. Und vor dem Essen gibt es Verkostung, oder? Ganz zu schweigen von Fast-Food, wie diese Nudeln mit Sauce in der Verpackung - nur Wasser hinzufügen. Urgh.

Ich weiß nicht, welche Daten Ihre Ausgabe benötigt und was die Eingabe ist. Im Folgenden finden Sie einige grobe Refactoring-Tipps für Anwendungen, die HTML / CSS ausgeben und mit einer MySQL-Datenbank interagieren. Dies kann keine vollständige Liste sein, und die Beschreibungen können einige Gedanken nur grob skizzieren:

  • CSS aus HTML entfernen Verwenden Sie in der verknüpften CSS-Definition effektiv Selektoren und ersetzen Sie alle style -Attribute, wenn Sie noch über einige verfügen. Dies macht Ihren CSS-Code wiederverwendbar und modularer. Es wird Ihnen helfen, Fehler in Ihrem HTML zu finden und die Struktur (HTML) von der Präsentation (CSS) zu trennen. Effektiver HTML-Start mit effektiver Verwendung von CSS, diese beiden sind sehr leistungsfähig zusammen und oft wird dies bereits Ihre Programme Ausgabe-Routinen aufhellen.
  • Verschieben Sie Geschäftslogik aus HTML . Sowohl HTML als auch Ihr Code können ein Biest sein, also halten Sie sie besser auseinander. Sie haben die Tendenz, miteinander zu kämpfen, und da beide sehr mächtig sind, wird der Kampf fortgesetzt, während Sie Ihre Anwendung entwickeln, die Sie von der Arbeit, die Sie tun müssen, ablenkt Überlegen Sie, ob Sie innerhalb Ihrer Anwendung bereits eine komplexe Ausgabe benötigen oder ob Sie Arrays mit Unterelementen weiterleiten können (ein Schlüssel ist eine Variable, eine Variable kann eine Zeichenfolge oder eine Zahl oder ein anderes Variablenarray enthalten). Normalerweise ist das alles erforderlich, um selbst komplexe Daten in eine Ansicht oder Vorlage zu übertragen. Ihr HTML muss dann nur einige Array-Mitglieder und foreach über Sub-Arrays zurückgeben. Dies ist eine sehr einfache Technik zum Erstellen einer Vorlage. Sie können PHP dafür verwenden, also sind Sie wirklich sehr flexibel (zeichnen Sie einfach den Rahmen, welcher Code in Ihre Ansichtsebene gehört und welcher Teil der Anwendung ist, z. B. indem Sie Werte für die Ansicht bereitstellen).
  • Verschieben Sie SQL aus Ihrem Code heraus . Verschieben Sie den Datenbankinteraktionscode weg. Erstellen Sie ein oder mehrere Objekte mit Methoden, die die Daten so zurückgeben, wie Sie sie in Ihrem tatsächlichen Verarbeitungscode benötigen (konsumieren), wie zum Beispiel $component->getThatData() , das dann Daten in einer normalisierten Form zurückgibt. Stellen Sie diesen Komponenten dann eine dedizierte Datenbankkomponente zur Verfügung, um mit der Datenbank zu sprechen.Verwenden Sie in Ihrem Anwendungscode (Geschäftslogik) nur die Datenbankkomponente und vorzugsweise die Objekte, die Sie erstellen, um die Daten zu erhalten, sodass Sie keine SQL-Zeile mehr in Ihrem Hauptcode haben.
  • Teilen und erobern Ihren Anwendungscode: Teilen Sie Ihren Code in Transaktionsskripts . Sie sind oft einfach aus bestehendem Spaghetti-Code zu erstellen und werden wahrscheinlich das gesuchte Trennzeichen sein, nach dem Sie in mittleren Begriffen suchen. Sie haben dann die Aufgabe, Daten zu verarbeiten und weiterzugeben (in die Ausgabe / Sicht).
  • Klare Sprache verwenden : Wenn Sie komplex formatierte Zeichenfolgendaten haben, die nicht normalisiert sind, schreiben Sie sich Parser Klassen, die die Arbeit für Sie erledigen und die leicht wiederverwendet werden können (wenn das ist der Fall in Ihrer Anwendung). Da Sie sich darauf freuen sollten, die Verwendung von einfachem SQL in Ihrem Code zu minimieren, sollten Sie sich darauf freuen, auch komplexe reguläre Ausdrücke zu entfernen. Encapsulate was variiert ist ein wichtiger Punkt. Gleiches gilt für lange Routinen, die nur einige Daten verarbeiten (z. B. sortieren, ordnen und in einem anderen Format anordnen), sie in Komponenten jeder einzelnen Datei verschieben und darüber nachdenken, wie Sie sie zugänglich und wiederverwendbar machen können.
  • Machen Sie Ihren Code funktionsfähig : Erfahren Sie mehr über die Logik, wie Sie Funktionen in Ihrem Programm aufrufen. Sie können versuchen, die Funktionalität von der Art ihrer Aktivierung zu trennen. Z.B. eine Routine, die eines der Transaction Scripts aufruft. Dies ist möglicherweise nicht notwendig, wenn Sie PHP-Dateien direkt über den Browser anfordern, da dies dann Ihre Transaktionsskripte sind und der Webserver den über URL gesendeten Befehl in Ihre Anwendung auf das Transaktionsskript auflöst. Aber Sie sollten dann jede Logik umbrechen, die benötigt wird, um den eingehenden Befehl und seine Parameter in wiederverwendbare Komponenten umzuwandeln (zB eine Request Klasse, die Standardcode enthält, um die URL und oder zu erhalten) Variablen aus einer HTTP-Anfrage).
  • Erstellen Sie einen gemeinsamen Einstiegspunkt , indem Sie dieselbe Datei ganz oben in alle Dateien einfügen, die über den Browser aufgerufen werden. Sie können dann gemeinsamen Code (z. B. Einrichten des Anwendungssitzungsstatus -Objekts und Initialisieren der Datenbankkomponente) darin einfügen, siehe auch Anwendungscontroller
  • Entfernen Sie die Duplizierung , indem Sie nach doppeltem Code suchen. Wickeln Sie es in eine Funktion oder Klasse. Erstellen Sie einen Bibliotheksordner für Ihre eigene Anwendung, in die Sie Ihre Includes einfügen. Wenn Sie einem gemeinsamen Muster mit Klassennamen und Namensräumen folgen, können Sie problemlos einen Autoloader verwenden, um die Integration zu vereinfachen. Machen Sie Ihre Bibliothek getrennt von Drittanbieter-Code. Platzieren Sie den Code von Drittanbietern in einen eigenen Bibliotheksordner mit einem Unterverzeichnis für jede Drittanbieterkomponente.
  • Verwenden Sie leichtgewichtige, vorhandene Komponenten. Lightweight ist wichtig, weil Sie bereits Ihren eigenen Code haben, den Sie nicht auf einmal in ein Framework umwandeln möchten. Vorhanden ist wichtig, weil Sie das Rad nicht neu erfinden wollen. Sie werden genug Arbeit haben, um Ihren Code selbst zu refaktorieren. Nachdem Sie sich bei Ihrer Bewerbung besser gefühlt haben und Sie noch Kraft und Willen haben, können Sie immer alles neu schreiben. Aber wenn Sie alleine oder in einem kleinen Team sind, Existing ist ziemlich mächtig. Einfache Bibliotheken sind zum Beispiel:
  • Anwendungsstatus erstellen , z. als ein Objekt, das Sie verwenden können, wenn einige Komponenten über den Anwendungszustand oder einander ohne direkte Interaktion wissen müssen. Standardmäßig in PHP, wenn Sie keinen haben, werden globale und globale statische Variablen verwendet, um den Status zu erstellen. Allerdings können diese Variablen Ihr Leben hart machen, wenn der Code wächst. Wenn Sie ein Anwendungsstatusobjekt erstellen, ist es klar, welche Komponenten es verwenden, der Zugriff darauf kann gesteuert werden (z. B. das Aufrufen einer Methode anstelle des Lesens einer Variablen, was beim Debuggen hilfreich sein kann) und Komponenten können ebenfalls herausfinden, ob es das ist Die richtige Zeit in der Anwendung fließen in Aktion. Es ist auch ein gutes Werkzeug, um den Code im Laufe der Zeit zu refaktorieren.
  • Eine funktionierende Anwendung beibehalten , halten Sie Ihren Code in einem Zustand, in dem er ausgeführt werden soll. Idealerweise würde dies durch automatische Tests unterstützt werden. Bedenken Sie, dass Sie viel umschreiben müssen. Wenn Sie beispielsweise beginnen, eine Datenbankkomponente zu integrieren, tun Sie es. Verschieben Sie Ihren gesamten vorhandenen Code in einem Schritt dorthin. Wer sagt dir, dass es noch läuft? Benutze git, um Dinge besser rückgängig zu machen und zu testen. Das ist wichtiger als die Auswahl der richtigen Bibliothek. Die Erhaltung einer funktionierenden Anwendung ist auch immer der entscheidende Punkt, weil Sie es deshalb ändern, oder?
hakre 27.12.2011, 16:56
quelle
2

Warum nicht einen Templating-Motor verwenden? TWIG ist sehr einfach zu benutzen und großartig für diese Art von Dingen. Es wird oft mit dem Symfony-Framework verwendet, kann aber leicht eigenständig verwendet werden.

    
MrGlass 27.12.2011 15:32
quelle