Frage

Bitte teilen Sie Ihre Lieblings Application Design / Design-Muster für den Einsatz in PHP mit mir. Manche Dinge Ich mag gerne wissen:

  • Wie Sie Ihre Ordner sind so konzipiert,
  • Wie Sie Objekt oritentation in Ihren PHP-Anwendungen verwenden
  • Haben Sie eine Standardmethode mit CRUD Umgang, Paginieren oder anderen gemeinsamen Aufgaben?
  • Wie vermeiden Sie sich wiederholenden Code verwenden? Was ist Ihr Konzept für Bibliotheken / common Code-Sharing, etc.?
  • Welche Möglichkeiten gibt, in denen Sie Ihren Code eleganter machen?

Sie müssen nicht alle diese beantworten, jede oder ein paar davon zu beantworten hilfreich sein wird.

Der Grund ich dies zu fragen, ist, weil ich sehr müde bin zu schreiben, sich wiederholend, hässlich Code in PHP und ich möchte einen kleinen Rahmen für meine freelancing Projekte, die einfacher Programmierung machen und lassen Sie mich auf dem anspruchsvollen konzentrieren / Geschäftsaufgaben eher als Formularvalidierung, Paginieren, und die anderen weltlichen Aktivitäten, die 80% der Programmierarbeit in PHP machen

Alle Meinungen geschätzt!

War es hilfreich?

Lösung

ich bekommen könnte für diese niedergestimmt, aber wenn Sie wirklich Ihren eigenen Rahmen wollen, schreiben, sage ich für ihn gehen, weil man viel aus den Erfahrungen lernen. Die anderen Frameworks erwähnt hier sind groß und getestet und Sie würden nicht eine schlechte Entscheidung mit ihnen werden zu machen, aber es ist Ihre Wahl.

Bevor Sie Ihren Rahmen zu schreiben, Blick auf der anderen Frameworks (in ihrer Syntax, Verzeichnisstruktur, Namensschema, Designmuster, etc.) und versuchen Sie herauszufinden, warum sie taten, was sie taten und was, wenn überhaupt, würden Sie anders machen. Probieren Sie ein paar Übungen und spielen mit ihren Code, machen einige Beispielanwendungen. Wenn nach, das zu tun, nicht wahr sie gerne verwenden, dann gehen Sie vor und starten Sie Ihren Rahmen der Planung, zu halten, was funktioniert hat und zu verbessern, was nicht.

Wenn Sie sich entscheiden, Ihre eigene Rolle, hier sind ein paar Dinge, die ich aus meiner eigenen Erfahrung empfehlen würde:

  • Sicherheit Ihre oberste Priorität - Wenn Sie eine Datenzugriffsschicht zu schreiben, benutzen Sie gebundene Parameter. Wenn Sie schreiben ein Formular Klasse, Schutz vor CSRF und XSS. Fangen Sie Ihre Ausnahmen und behandeln Ihre Fehler. Stellen Sie sicher, dass Ihre PHP Umwelt sicher ist. Versuchen Sie nicht, kommen mit Ihrem eigenen Verschlüsselung Algorithmus. Wenn Sie konzentrieren sich nicht auf Sicherheit, ist es nicht wert zu schreiben Ihr eigener Rahmen.
  • Kommentieren Dein-Code - Sie müssen Kommentare Ihnen zu helfen, daran erinnern, wie Ihr Code funktioniert nach einer Weile. ich findet in der Regel, dass Docblock Kommentare sind mehr als genug. Darüber hinaus, Kommentar, warum Sie etwas getan haben, nicht was du getan hast. Wenn Sie müssen erklären, was, können Sie Refactoring.
  • Single Verantwortung Klassen und Methoden - Die meisten Ihrer Klassen und Methoden sollten eine Sache tun und nur eine Sache. Besonders achten Sie auf diese mit der Datenbank - Ihre Paginierung Klasse sollte nicht verlassen Ihr Datenzugriffsobjekt, noch sollte fast jede andere (Low-Level) Klasse.
  • Einheit Test - Wenn alle Ihre Methoden nicht nur eine Sache, sollte es weit sein einfacher, sie zu testen und es wird führen zu einem besseren Code. Schreiben Sie den Test zuerst, dann an dem Code übergibt die Prüfung. Dies wird Ihnen auch mehr Freiheit Refactoring später ohne Brechen etwas.
  • Abstrakt ähnliche Klassen - Wenn Sie haben mehr als eine Klasse, die tut ähnliche Dinge, eine übergeordnete Klasse erstellen dass nutzt die Ähnlichkeiten zwischen die Klassen und erweitern sie.
  • Delegierter und modularisieren - Wenn Sie Schreiben eines Validierungssystem (und Chancen sind Sie wahrscheinlich würde), nicht jede Prüfung als umfassen Verfahren in einigen Super-Validierung Klasse. Trennen Sie sie in einzelne Klassen und nennen sie je nach Bedarf. Diese können in vielen Bereichen angewendet werden: Filter, Sprachen, Algorithmen, Validatoren, und so weiter.
  • Schützen und Privatisieren - In den meisten Fälle, es ist besser Getter zu verwenden und Setter-Methoden statt zuzulassen, dass direkter Zugriff auf Klassenvariablen.
  • Konsistente API - Wenn Sie ein Render () Verfahren und ein draw () Methode das tun die gleichen Dinge in verschiedenen Klassen, wählen Sie ein und gehen mit ihm in allen Klassen. Halten Sie die Reihenfolge der Die Parameter für die gleichen Methoden daß die gleichen Parameter verwenden. Eine einheitliche API ist eine einfachere API.
  • Speichern Autoloading - Die Klasse Namen können ein wenig klobig bekommen und lang, aber die Art und Weise Zend Namen der Klassen und organisiert die Verzeichnisse macht selbstladende viel einfacher. Aktualisieren :. Ab PHP 5.3, sollten Sie beginnen, Namespaces
  • Kein Echo oder drucken alles - geben es als Rückgabewert, und die Benutzer lassen entscheiden, ob es hallt werden soll. Viel Mal werden Sie den Rückgabewert verwenden als Parameter für eine andere Methode.
  • Sie nicht versuchen, die Welt zu lösen Probleme - Lösen Sie Ihre eigenen ersten. Wenn Sie brauchen nicht gerade jetzt eine Funktion, wie eine Klasse für lokalisierende Zahlen oder Daten oder Währung, schreiben Sie es nicht. Warten Sie, bis Sie brauchenes.
  • nicht Preoptimize - Bauen Sie ein paar einfache Anwendungen mit Ihrem Rahmen vor Abstimmung es in Ordnung. Andernfalls können Sie eine Menge verbringen Zeit auf nichts produktiv.
  • Verwenden Source Control - Wenn Sie verbringen unzählige Stunden zu schaffen Meisterwerk, nicht Gefahr, es immer verloren.

Andere Tipps

Ich habe mit den oben Plakate zustimmen. Wenn Sie nicht, einen Rahmen zu verwenden, wenn in PHP Programmierung sind Programmieren Sie wirklich mit den Händen hinter dem Rücken gefesselt. Ich persönlich empfehle CodeIgniter . Es ist der schnellste Rahmen um, es ist sehr leicht zu erlernen, und hat eine sehr aktive Community. Alle Ihre Fragen werden vom Framework beantwortet werden:

* How your folders are designed

CodeIgniter (oder ein Rahmen für diese Angelegenheit) trennt Ihre Logik in Ansichten, Modelle und Steuerungen, die jeweils mit einem eigenen Ordner.

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

CI hat eine Paginierung Bibliothek und es 3rd-Party-Bibliotheken wie DataMapper hat für Ihre CRUD Anrufe in einer objektorientierten Art und Weise (ORM) gewickelt wird.

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

Die Trennung des Modells, View und Controller machen für sehr elegant Code.

(Die 2 Fragen, die ich nicht so ziemlich implizierten antwortete, wenn das Framework)

Ich stelle mir eine Menge PHP-Entwickler einen ähnlichen Weg zu meinem gefolgt ist: kleine Skripte -> Verfahren / Inline-Code -> möglicherweise ein Blick auf Templating -> OOP -> dann einem Rahmen. Ich denke, es ist durchaus üblich sein kann für ein PHP-Entwickler mit PHP „erwachsen“ zu haben, Entwurfsmuster lernen die Funktionen mit der aktuellen Version zur Verfügung zu entsprechen.

MVC ist das am häufigsten verwendeten Design-Muster in dem populären Frameworks heute verwendet wird. CakePHP ist mein Rahmen der Wahl, obwohl Symphony und Zend auch sehr beliebt sind - es lohnt sich ist das Ausprobieren ein wenige und es wird bald offensichtlich, die Sie sich am wohlsten fühlen.

Für die meisten Projekte (bei denen eine schnelle Entwicklung und portablen Code die Prioritäten sind) ich Kuchen verwenden, aber für leichte Anwendungen (eine entwickelte ich war vor kurzem Good Baad ), die Sie schnell laufen möchten (auf Low-End-Hardware) und brauchen nicht auf die Masse / Gewicht durch die Funktionalität von einem der großen Frameworks habe ich Rasmus Lerdorf ist empfehle die Lektüre Artikel über seine Kein Rahmen PHP MVC-Framework .

Im Grunde genommen, wenn Sie nach einer echten objektorientierten Sprache sind, die schönen Code und die beste Design Praktiken PHP unterstützt wird immer auf die Gleichen von Ruby Python und C # gehen zu verlieren. Aber, hat PHP seine Stärken z.B. keine Notwendigkeit für eine Template-Sprache (es ist ein), kann PHP sehr schnell laufen und billig und muss nicht das Gewicht eines großen Rahmen für alle Anwendungen.

Ich würde ermutigen, ein Design-Muster Annahme, dass die Handhabbarkeit eines Design-Muster wie MVC nimmt und kombinieren es mit PHP Stärken.

ich fast das Gefühl, wie eine kaputte Schallplatte, aber ich würde empfehlen, dass Sie auf einige der gemeinsamen Rahmen aus zwei Gründen einen Blick:

  1. Auch wenn Sie nicht ein verwenden, werden einige von ihnen sehr gut geschrieben und sehr gut gestaltet. Besonders gefällt mir Zend Framework, aber ich werde in einer zweiten darauf zurückkommen.
  2. Fragen Sie sich, warum Sie das Rad neu zu erfinden sind. Fühlen Sie wirklich, dass Sie das gleiche Design-Probleme alle anderen so viel besser steht als die Gemeinschaft hinter (insert Rahmen der Wahl hier) verstehen etwas von Grund auf neu zu rechtfertigen zu schreiben? Das sage ich als jemand, der ursprünglich an mehreren Frameworks geschaut und entschieden, dass sie zu groß waren meine eigenen präsentiert zu viel von einer Lernkurve oder zu viel Aufwand und so entwickelt, kann ich Ihnen sagen, dass Sie Ihre eigenen von Grund auf neu zu schreiben, wenn Sie ein großer Schmerz ist kann einfach ein vorhandenes verwenden, die leicht erweitert werden kann.

Speaking einen Rahmen zu verwenden, die leicht erweitert werden kann, habe ich sehr gute Erfahrungen mit dem Zend Framework hatte. Es ist zusammenhängende und noch lose gekoppelte Struktur ermöglicht es, schnell und einfach eine vorhandene Komponente zu erweitern und die gesamte Rahmen wird um die Idee, mit dem Sie benötigen, um Ihre eigene Helfer und Plugin-Klassen zu schreiben, um seine Gesamtfunktionalität hinzuzufügen.

Ich habe Zend Framework gefunden so völlig flexibel zu sein, dass ich eine einzelne Website als Teil Zend Framework MVC leite und ein Teil meiner alten crappy Rahmen und auch ältere crappier Code, ich habe nicht neu zu schreiben bekommen noch. In der Tat, denn während unseres Umschreibens wir eine Seite gefunden, die unannehmbar langsam mit dem alten Rahmen liefen, habe ich die einzige Seite geschaltet unter der Zend Framework-Architektur ausgeführt werden.

, um einige Ihrer Fragen zu beantworten, würde ich empfehlen, dass Sie Patterns aussehen in der Enterprise Application Architecture von Martin Fowler. Er bietet viele wertvolle Erkenntnisse darüber, wie eine Reihe dieser gemeinsamen Probleme wie zu lösen, wie eine Datenbank Interaktion Schicht in Ihrer Anwendung zu erstellen. Fowler auch behandelt Themen wie MVC und Front Page-Controller.

ich habe erklärt die meisten meiner PHP-Methode hier .

aber heutzutage, ich verwende nur Django überall ich kann.

begann ich aus dem Smarty Templating-Engine, wenn ich zuerst müde wurde Code und HTML zu mischen. Nachdem er eine Weile Hacking, wurde mir klar, dass mein eigener Rahmen zu schreiben gerade Arbeit zu duplizieren.

Ich habe ein paar Projekte gemacht mit Joomla , das ist wirklich ein CMS ist, aber es gibt eine Menge Kunden die Kontrolle über die Inhalte.

Schließlich habe ich für meine Projekte mit einem realen Rahmen angesiedelt. Ich verwende symfony , die von Rails inspiriert und ist sehr gut dokumentiert, aber ich habe hörte CakePHP und ZendFramework sind auch sehr gut.

Ich verwende Zend Framework, das ist ziemlich viel Ordner-Layout und OOP (MVC-Paradigma) definiert. Ich Zend_Paginator für allgemeine Aufgaben, wie zum Beispiel Paginierung verwenden (meine Modellklassen implementieren Zend_Paginator_Adapter_Interface), für die Validierung verwende ich Zend_Validate Klassen usw. Dank, dass ich auf Geschäftslogik vollständig konzentrieren kann, statt das Rad neu zu erfinden.

Mit Zend Framework und Lehre , meine Ordnerstruktur sieht in der Regel wie folgt aus:

root
  app
    config         (db config, routing config, misc config)
    doctrine       (fixtures, migrations, generated stuff, etc)
    lib
    logs
    models         (doctrine models)
    modules        (zend mvc modules)
    bootstrap.php
  docs             (db diagrams, specs, coding standards, various docs)
  pub              (web root)
  tests
  tools            (console tools, i.e. doctrine-cli)
  vendor           (zend and doctrine libraries, preferably as svn-externals)

Ich habe herum Messing meine eigenen Sachen für eine Weile zu schreiben jetzt und jedes Mal kann ich nie um bekommen es vollständig bis zum Schlichten, weil ich auf etwas stecken.

Und dann kommt der Teil, wo ich bis zur Realisierung kommen, ob ich etwas richtig mache.

Und als solche habe ich meine eigene zu schreiben ein gehen mit einem Publikumsliebling aufgegeben. Zend

ich bei anderen sah, aber es scheint Zend um eine Weile gewesen ist und sie wissen, ihre Sachen.

MVC ist auch die Art, wie ich mich jetzt schreibe ich mit irgendetwas werde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top