41 Stimmen

Welche PHP-Anwendungsdesigns/Gestaltungsmuster verwenden Sie?

Bitte teilen Sie mir Ihre Lieblingsanwendungsdesigns / Entwurfsmuster für die Verwendung in PHP mit. Einige Dinge, die ich gerne wissen würde:

  • Wie Ihre Mappen gestaltet sind
  • Wie Sie die Objektoritentation in Ihren PHP-Anwendungen verwenden
  • Haben Sie eine Standardmethode für den Umgang mit CRUD, Paginierung oder anderen allgemeinen Aufgaben?
  • Wie vermeiden Sie die Verwendung von sich wiederholendem Code? Wie gehen Sie mit Bibliotheken/gemeinsamem Code usw. um?
  • Wie können Sie Ihren Code eleganter gestalten?

Sie müssen nicht alle Fragen beantworten, die Beantwortung einer oder mehrerer Fragen ist jedoch hilfreich.

Der Grund, warum ich das frage, ist, weil ich sehr müde bin, sich wiederholenden, hässlichen Code in PHP zu schreiben, und ich möchte ein kleines Framework für meine freiberuflichen Projekte erstellen, das die Programmierung erleichtert und mich auf die anspruchsvollen/geschäftlichen Aufgaben konzentrieren lässt, anstatt auf Formularvalidierung, Paginierung und die anderen banalen Tätigkeiten, die 80% der Programmierarbeit in PHP ausmachen

Alle Meinungen sind willkommen!

0 Stimmen

Wenn Sie alle Meinungen gleich gewichten, warum dann die Prämie? Darauf gibt es sicher nicht die eine, gute Antwort.

0 Stimmen

Ja, wonach suchen Sie? Ich glaube, ich verstehe Ihre Frage so, wie sie jetzt formuliert ist, aber wenn Sie ein Kopfgeld aussetzen, dann lässt mich das vermuten, dass Sie mehr wollen.

0 Stimmen

Ich suche nur nach interessanten Diskussionen. Ich werde am Ende die am besten beschriebene Antwort auswählen

71voto

VirtuosiMedia Punkte 49396

Es kann sein, dass ich dafür abgelehnt werde, aber wenn Sie wirklich Ihr eigenes Framework schreiben wollen, dann sollten Sie es tun, denn Sie werden eine Menge aus dieser Erfahrung lernen. Die anderen hier erwähnten Frameworks sind großartig und getestet und Sie würden keine schlechte Entscheidung treffen, wenn Sie sie verwenden, aber es ist Ihre Entscheidung.

Bevor Sie mit dem Schreiben Ihres Frameworks beginnen, schauen Sie sich die anderen Frameworks an (ihre Syntax, Verzeichnisstruktur, Namensschema, Entwurfsmuster usw.) und versuchen Sie herauszufinden, warum sie das getan haben, was sie getan haben, und was Sie, wenn überhaupt, anders machen würden. Probieren Sie ein paar Tutorials aus und spielen Sie mit ihrem Code, erstellen Sie ein paar Beispielanwendungen. Wenn es Ihnen danach nicht gefällt, sie zu benutzen, dann fangen Sie an, Ihr eigenes Framework zu planen, behalten Sie, was funktioniert hat, und verbessern Sie, was nicht funktioniert hat.

Wenn Sie sich dazu entschließen, Ihre eigene Rolle zu spielen, würde ich Ihnen aus eigener Erfahrung einige Dinge empfehlen:

  • Machen Sie Sicherheit zu Ihrer obersten Priorität - Wenn Sie eine Datenzugriffsschicht schreiben, verwenden Sie gebundene Parameter. Wenn Sie ein Formular schreiben Klasse schreiben, schützen Sie sich vor CSRF und XSS. Fangen Sie Ihre Ausnahmen ab und behandeln Sie Ihre Fehler. Stellen Sie sicher, dass Ihre PHP Umgebung sicher ist. Versuchen Sie nicht einen eigenen Verschlüsselungsalgorithmus zu entwickeln Algorithmus zu entwickeln. Wenn Sie sich nicht auf auf Sicherheit konzentrieren, lohnt es sich nicht, ein ein eigenes Framework zu schreiben.
  • Kommentieren Sie Ihren Code - Sie benötigen Kommentare, die Ihnen helfen, sich zu erinnern wie Ihr Code nach einer Weile funktioniert. I finde normalerweise, dass Docblock-Kommentare mehr als genug sind. Darüber hinaus, kommentieren Sie, warum Sie etwas getan haben, nicht was Sie getan haben. Wenn Sie erklären müssen was, sollten Sie vielleicht umstrukturieren.
  • Klassen der Einzelverantwortung und Methoden - Die meisten Ihrer Kurse und Methoden sollten eine Sache tun und nur eine Sache tun. Achten Sie besonders auf mit der Datenbank - Ihre Paginierungsklasse sollte sich nicht auf Ihr Datenzugriffsobjekt angewiesen sein, noch sollte fast jede andere (low-level) Klasse.
  • Einheitstest - Wenn jede Ihrer Methoden nur eine Sache tut, sollte es viel einfacher sein einfacher sein, sie zu testen, und es wird wird zu besserem Code führen. Schreiben Sie den Test zuerst, dann den Code zum Bestehen des Test zu bestehen. Das gibt Ihnen auch mehr die Freiheit, später zu refaktorieren, ohne etwas kaputt zu machen.
  • Abstrakte ähnliche Klassen - Wenn Sie mehr als eine Klasse haben, die ähnliche Dinge tun, erstellen Sie eine übergeordnete Klasse die die Ähnlichkeiten zwischen den der Klassen nutzt und sie erweitert.
  • Delegieren und Modularisieren - Wenn Sie ein Validierungssystem schreiben (und und die Chancen stehen gut, dass Sie das tun), schließen Sie nicht jeden Validator als eine Methode in eine Super-Validierungs Klasse ein. Trenne sie in individuelle Klassen und rufen Sie sie nach Bedarf auf. Diese kann in vielen Bereichen angewendet werden: Filter, Sprachen, Algorithmen, Validierer und so weiter.
  • Beschützen und privatisieren - In den meisten Fällen ist es besser, Getter- und setter-Methoden zu verwenden, anstatt den direkten Zugriff auf Klassenvariablen zu erlauben.
  • Einheitliche API - Wenn Sie eine render()-Methode und eine draw()-Methode die die gleichen Dinge in verschiedenen Klassen tun, wählen Sie eine aus und verwenden sie über alle Klassen hinweg. Behalten Sie die Reihenfolge der der Parameter für Methoden die dieselben Parameter verwenden. Eine konsistente API ist eine einfachere API.
  • Autoloading nicht vergessen - Die Klasse Namen können ein wenig klobig und lang werden, aber die Art, wie Zend die Klassen und die Organisation der Verzeichnisse macht das automatische Laden viel einfacher. Update : Ab PHP 5.3 sollten Sie anfangen, Namespaces zu verwenden.
  • Niemals ein Echo ausgeben oder etwas drucken - Geben als Rückgabewert an und lässt den Benutzer entscheiden lassen, ob es als Echo ausgegeben werden soll. Oft verwenden Sie den Rückgabewert oft als Parameter für eine andere Methode.
  • Versuchen Sie nicht, die Probleme der Welt zu lösen Probleme der Welt zu lösen - Lösen Sie zuerst Ihre eigenen Probleme. Wenn Sie eine Funktion nicht sofort brauchen, wie eine Klasse zur Lokalisierung von Zahlen Datum oder Währung, schreiben Sie sie nicht. Warten Sie, bis Sie es brauchen.
  • Nicht voroptimieren - Bauen Sie ein paar einfache Anwendungen mit Ihrem Framework, bevor Sie es feinabstimmen. Andernfalls können Sie eine Menge Zeit mit nichts Produktivem verbringen.
  • Quellensteuerung verwenden - Wenn Sie unzählige Stunden damit verbringen, ein Meisterwerk zu schaffen, sollten Sie nicht riskieren, dass es verloren geht.

13voto

ryeguy Punkte 62987

Ich muss den Vorrednern zustimmen. Wenn Sie bei der PHP-Programmierung kein Framework verwenden, sind Ihnen wirklich die Hände auf dem Rücken gebunden. Ich persönlich empfehle CodeIgniter . Es ist das schnellste Framework, das es gibt, es ist sehr leicht zu erlernen und hat eine sehr aktive Community. Alle Ihre Fragen werden durch das Framework beantwortet:

* How your folders are designed

CodeIgniter (oder jedes andere Framework) trennt Ihre Logik in Views, Models und Controller, die jeweils ihren eigenen Ordner haben.

* Do you have a standard way of dealing with CRUD, pagination, or any other common tasks?

CI verfügt über eine Paginierungsbibliothek und Drittanbieterbibliotheken wie DataMapper, um Ihre CRUD-Aufrufe objektorientiert zu verpacken (ORM).

* What are ways in which you can make your code more elegant?

Die Trennung von Model, View und Controller sorgt für einen sehr eleganten Code.

(Die 2 Fragen, die ich nicht beantwortet habe, sind bei der Verwendung des Rahmens so gut wie impliziert)

9voto

Rudenoise Punkte 133

Ich kann mir vorstellen, dass viele PHP-Entwickler einen ähnlichen Weg eingeschlagen haben wie ich: kleine Skripte -> prozeduraler/Inline-Code -> möglicherweise ein Blick auf Templating -> OOP -> dann ein Framework. Ich denke, es ist durchaus üblich, dass ein PHP-Entwickler mit PHP "aufgewachsen" ist und Entwurfsmuster erlernt hat, die zu den in der aktuellen Version verfügbaren Funktionen passen.

MVC ist das am häufigsten verwendete Entwurfsmuster in den heute gängigen Frameworks. CakePHP ist der Rahmen meiner Wahl, obwohl Sinfonie y Zend sind ebenfalls sehr beliebt - es lohnt sich, einige auszuprobieren, und es wird sich bald herausstellen, mit welchem Sie sich am wohlsten fühlen.

Für die meisten Projekte (bei denen schnelle Entwicklung und portabler Code im Vordergrund stehen) verwende ich Cake, aber für leichtgewichtige Anwendungen (eine, die ich kürzlich entwickelt habe, war Good Baad ), die Sie schnell ausführen möchten (auf Hardware mit geringer Spezifikation) und nicht die Masse/Gewicht benötigen, die durch die Funktionalität eines der großen Frameworks hinzugefügt wird, empfehle ich die Lektüre von Rasmus Lerdorfs Artikel auf seiner Kein Framework PHP MVC-Framework .

Wenn Sie eine echte objektorientierte Sprache suchen, die schönen Code und die besten Entwurfspraktiken fördert, wird PHP immer gegenüber Ruby, Python und C# den Kürzeren ziehen. Aber PHP hat seine Stärken, z.B. braucht man keine Templatesprache (es ist eine), PHP kann sehr schnell und billig laufen und braucht nicht das Gewicht eines großen Frameworks für alle Anwendungen.

Ich würde dazu raten, ein Entwurfsmuster zu verwenden, das die Handhabbarkeit eines Entwurfsmusters wie MVC mit den Stärken von PHP kombiniert.

8voto

Noah Goodrich Punkte 24212

Ich fühle mich fast wie eine kaputte Schallplatte, aber ich würde Ihnen aus zwei Gründen empfehlen, einen Blick auf einige der gängigen Rahmenwerke zu werfen:

  1. Selbst wenn Sie sich entscheiden, keine davon zu verwenden, sind einige von ihnen sehr gut geschrieben und sehr gut gestaltet. Ich mag besonders Zend Framework, aber darauf komme ich gleich zurück.
  2. Fragen Sie sich, warum Sie das Rad neu erfinden wollen. Haben Sie wirklich das Gefühl, dass Sie die gleichen Design-Probleme, mit denen alle anderen konfrontiert sind, so viel besser verstehen als die Community hinter (hier das Framework Ihrer Wahl einfügen), dass es gerechtfertigt ist, etwas von Grund auf neu zu schreiben? Als jemand, der sich ursprünglich mehrere Frameworks angesehen und dann entschieden hat, dass sie zu umfangreich sind, eine zu lange Lernkurve aufweisen oder zu viel Overhead verursachen, und deshalb mein eigenes Framework entwickelt hat, kann ich Ihnen sagen, dass es sehr mühsam ist, ein eigenes Framework von Grund auf zu entwickeln, wenn man einfach ein bestehendes verwenden kann, das sich leicht erweitern lässt.

Apropos, ich habe sehr gute Erfahrungen mit Zend Framework gemacht, da ich ein Framework verwende, das leicht erweitert werden kann. Seine kohärente und dennoch lose gekoppelte Struktur macht es möglich, jede bestehende Komponente schnell und einfach zu erweitern und das gesamte Framework ist so konzipiert, dass man seine eigenen Hilfs- und Plugin-Klassen schreiben muss, um die Gesamtfunktionalität zu erweitern.

Ich habe festgestellt, dass Zend Framework so flexibel ist, dass ich eine einzelne Website zum Teil mit Zend Framework MVC und zum Teil mit meinem alten beschissenen Framework und noch älterem beschissenen Code betreibe, den ich noch nicht umschreiben konnte. In der Tat, weil wir während unseres Rewritings eine Seite gefunden haben, die mit dem alten Framework inakzeptabel langsam lief, habe ich die einzelne Seite so umgestellt, dass sie unter der Zend Framework Architektur läuft.

Um einige Ihrer Fragen zu beantworten, empfehle ich Ihnen die Lektüre von Patterns of Enterprise Application Architecture von Martin Fowler. Er bietet viele wertvolle Einblicke in die Lösung einer Reihe dieser häufigen Probleme, z. B. wie man eine Datenbankinteraktionsschicht in seiner Anwendung erstellt. Fowler behandelt auch Themen wie MVC und Front Page Controller.

2voto

Javier Punkte 58737

Ich habe den größten Teil meiner PHP-Methodik erklärt aquí .

aber heutzutage benutze ich Django einfach überall, wo ich kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X