Abgesehen von den standardmäßigen OO-Konzepten, welche anderen Strategien ermöglichen das Erstellen von gutem, sauberem PHP-Code, wenn kein Framework verwendet wird?
Antworten
Zu viele Anzeigen?Denk daran: MVC, OOP und Schichten sind Designkonzepte, keine sprachlichen Konstrukte oder Dateistrukturen.
Für mich bedeutet das, dass es keinen Wert hat, ein weiteres Templatesystem über PHP zu verwenden (das eine Templatesprache ist), wenn kein Framework verwendet wird und wenn es keine verschiedenen Teams für Programmierung und Design gibt. Außerdem bedeutet das Trennen von Code und Layout nicht unbedingt, dies in verschiedenen Dateien zu tun.
So habe ich das früher für einmalige, selten erweiterte PHP-Webanwendungen gemacht:
- Schreibe eine "allgemeine Dienstprogramme"-Datei, in der ich einige Formatierungs-/Säuberungsfunktionen sowie einige DB-Zugriffsfunktionen platziere:
- getquery(): gibt ein Ergebnisobjekt zurück, wenn ein SQL übergeben wird
- getrecord(): gibt ein Datensatzobjekt zurück, wenn ein SQL übergeben wird (und schließt die Abfrage)
- getdatum(): gibt ein einzelnes Feld zurück, wenn ein SQL übergeben wird (und schließt die Abfrage)
- platziere alle Konfigurationen (DB-Zugriff, einige URL-Präfixe usw.) in einer "config.php"-Datei
- schreibe eine Modellschicht, entweder eine Datei oder eine für jedes Objekt, das in der DB gespeichert wird. Dort befinden sich alle SQL-Konstanten, es wird eine API auf höherer Ebene präsentiert, die auf deinen konzeptionellen Objekten basiert, nicht auf DB-Datensätzen.
- getquery(): gibt ein Ergebnisobjekt zurück, wenn ein SQL übergeben wird
das ist dein 'Framework', dann schreibst du die 'Präsentations'-Schicht:
-
eine PHP-Datei für jede Seite, beginnt mit etwas einfachem Code zum Abrufen der benötigten Objekte, gefolgt von HTML mit eingefügtem PHP-Code, nur um die 'Lücken zu füllen'. Mit sehr wenigen Ausnahmen sollte der komplexeste Code dort für Schleifen sein. Ich habe die Regel, nur Einzeiler zu verwenden, das
?>
sollte in derselben Zeile wie das Öffnen vonsein
`
- jedes Daten-Eingabeformular sollte auf ein kleines PHP verweisen, ohne HTML, das einfach die POST-Daten erhält, in die DB eingibt und zur aufrufenden Seite weiterleitet.
`
`
und das war es. Wenn du alleine arbeitest, hat es alle Trennungsabsichten, die du brauchst, ohne in einer Vielzahl von Dateien für eine einzelne Benutzeraktion zu versinken. Jede Seite, wie sie vom Benutzer gesehen wird, wird von einer einzigen PHP-Datei verwaltet.
Es ist sogar einfach zu warten, nach ein paar Monaten ohne Blick auf den Code, da es einfach ist, die App zu testen, indem du dir die Dateinamen im URL-Feld des Browsers notierst. Dies führt dich direkt zum relevanten Code.
(heutzutage verwende ich natürlich für fast alles Django...)
`
Ich würde sagen, ziemlich gleich wie für jede andere Sprache:
- Optimiere nicht vorzeitig
- Halte Methoden klein
- Übe DRY
- Übe datengetriebene Programmierung
- Verwende sinnvolle Abkürzungen (z.B. ternärer Operator)
- Formatiere deinen Code gut, damit er von anderen verstanden werden kann
- Verwende OO nicht blind
- Überprüfe immer Rückgabecodes auf Fehler
- Aktiviere das höchste Warnniveau und stelle sicher, dass dein Code keine Warnungen produziert
- Sei sehr vorsichtig bei Typisierungsproblemen (das gilt für alle schwach typisierten Sprachen). Der '===' Operator ist dein Freund.
Wenn du jemals merkst, dass du HTML und Code mischst, dann HALTE einfach an. Du machst es, nun ja... Falsch! http://dennisjudd.com/albums/cute_cats/wrong_mike.jpg
Wirklich, diese Frage ist ziemlich sprachagnostisch, da sie für die meisten Sprachen gilt, in denen Sie sich entscheiden, "eigene" Lösungen zu entwickeln. Zwei Vorschläge, die ich machen würde, wären:
Erstens, nur weil Sie kein Framework verwenden, bedeutet das nicht, dass Sie nicht die Muster zur Trennung von Code übernehmen können. Das MVC-Muster ist das Mindeste, was Sie in Betracht ziehen sollten, wenn Sie Ihren Quellcode anordnen - es sorgt für eine viel sauberere und leichter zu wartende Sammlung von Quellcode, auch wenn die Anwendung nicht vollständig den mit Frameworks verbundenen Routingprozessen folgt. Code, der Dinge "ausführt", von dem, der Dinge "darstellt", getrennt zu haben, ist sehr vorteilhaft.
Zweitens, nur weil Sie sich entschieden haben, kein vollständiges Framework zu verwenden, bedeutet das nicht, dass Sie das Rad neu erfinden müssen. Nutzen Sie vorgefertigte Bibliotheken vernünftig, um bestimmte Probleme zu lösen. Zwei gute Beispiele wären ein Logging-Framework (log4php) und eine Lösung zur Front-End-Bereitstellung/Template-Erstellung (Smarty).
- See previous answers
- Weitere Antworten anzeigen