Schlüsselpunkte
Dieser Artikel wurde ursprünglich zum Zenofcoding veröffentlicht und wird hier mit Erlaubnis des Autors erneut veröffentlicht.
Eine einfache Frage veranlasste mich, mich zu setzen und diese Follow-up in meinem Beitrag vor ungefähr einem Jahr zu schreiben.
F: Was denkst du über die aktuelle Situation? (24. Februar 2017)
a: "Ich denke, es liegt hauptsächlich von Laravel und Symfony. Was das PHP -Framework betrifft. Wenn Sie ein neues Projekt starten, denke ich nicht, dass es einen besonderen Wert gibt, CakePHP zu verwenden, Zend, Codesigniter, yii usw. Ich kann Gründe sehen, diese Frameworks nur zu verwenden, wenn Sie bereits von ihnen Bescheid wissen oder Entwickler haben, die die Angewohnheit haben, sie zu verwenden. Wenn die echte Entwicklung beginnt, müssen Sie in der Lage sein, Antworten auf Tools, Plugins und häufig gestellte Fragen zu finden. Mit den Laravel- und Symfony -Gemeinschaften und der kontinuierlichen Entwicklung neuer „Module“ oder Merkmale fühlen Sie sich nie rückständig. Laracasts allein (auch wenn Sie sich nicht mit Laravel entwickeln) ist großartig.
Unabhängig davon, ob es sich um die Integration mit Diensten wie Iron.IO oder anderen SaaS-Anbietern handelt, unterstützt verschiedene Datenquellen oder lokale Entwicklungsumgebungen wie Homestead, diese Frameworks und Support-Module sind vorwärtsgerichteter.
lumen ergänzt eine schnelle API -Entwicklung, und Laravel ist in der Tat eine hervorragende Methode für die schnelle Anwendungsentwicklung und das Prototyping von heute. Dies bedeutet nicht, dass es beim Aufbau großer Anwendungen einer Art Einschränkung unterliegt.
Insgesamt sehen wir jedoch eine Verlagerung zu einer Container-basierten Architektur, bei der MVC viel weniger effektiv ist. Es dreht sich alles um Microservices, Orchestrierung und Erstellen von Anwendungen in "Funktionen" (d. H. AWS Lambda und ähnliche Dienste). Vielleicht ist es Zeit, Ihren Knoten.JS- und Golang -Fähigkeiten zu verbessern :) ”
Obwohl ich mit dieser Antwort im Allgemeinen zufrieden bin, kann ich nicht anders, als zu denken, dass es eine gute Idee ist, einige dieser Punkte zu erläutern und den Status quo erneut zu prüfen.
Bevor ich über seltsame Themen wie "Golang" spreche, treten wir einen Schritt zurück und sehen die Trends im PHP MVC -Framework -Feld 2017.
Ich denke, der Trend, den wir in der Vergangenheit beobachtet haben, ist weiter. Laravel entwickelt sich immer noch weiter, während andere dahinter sind. Die Popularität von Symfony ist geringfügig gestiegen, möglicherweise aufgrund der mit Spannung erwarteten Veröffentlichung von Symfony 3.
(Ich habe spezifischere Vergleichssuchungen wie "CakePhp 3" oder "ZF2" ausprobiert, aber diese Suchanfragen ergaben keine statistisch signifikanten Trends).
Ich bin dieses Jahr Codesigniter beigetreten, weil es sehr beliebt war, und das war offensichtlich. Ich habe viele Fragen zu CodeIgniter und meiner Meinung zu seinem Platz in der PHP MVC -Community erhalten ... Kurz gesagt, CI konkurriert immer noch nicht, da es sich nicht um ein echtes MVC -Framework handelt. Ich weiß nicht, wie man es nennt, außer einer gut organisierten Popo-Sammlung ...
Zitieren wir direkt aus ihrem Handbuch:
Codesigniter verfolgt einen eher lockeren Ansatz für MVC, da kein Modell erforderlich ist. Wenn Sie keine zusätzliche Trennung benötigen oder feststellen, dass das Aufrechterhaltung von Modellen komplexer ist als Sie möchten, können Sie sie ignorieren und Ihre Anwendung auf minimale Weise mit Controllern und Ansichten erstellen.
Ich bin mit diesem Ansatz völlig nicht einverstanden, wenn es darum geht, den Rahmen zu erstellen. Vielleicht ist es eine schöne Kesselplatte, weshalb Codesigniter beliebt ist, aber das Rahmen muss bestimmte Disziplinen durchsetzen, oder das Endprodukt wird zu einer Reihe von Spaghetti -Codes, die in eine Art "gemustert" eingewickelt sind.
Als nächstes bringt Symfony 3 einige Verbesserungen an der Entwicklererfahrung, der Abhängigkeitsinjektion und vielen anderen Merkmalen. Wie viele PHP -Gegenstücke bietet es jetzt ein Mikroframewerk. Im Gegensatz dazu bietet ZF3 eine Reihe von Verbesserungen an, z.
Für Zend Framework 2 MVC -Benutzer ist der Unterschied subtil ...Ich hoffe wirklich, dass sie sagen, dass es viele Unterschiede gibt, es gibt einige große architektonische Verbesserungen und einige wunderbare neue Module, die Ihnen helfen, Dinge auf moderne Weise zu entwickeln. Leider ist ZF3 in den meisten Fällen ZF2 immer noch sehr ähnlich.
lange Geschichte kurz
Aber das beredte Modell kann überfüllt und ziemlich groß werden und möglicherweise zu viele Laravel -Dienste erzeugt (um nicht mit Microservices verwechselt zu werden), und die Menschen beginnen, das Repository -Muster zu implementieren, in dem es nicht geeignet ist. Daher wurden Monomeranwendungen geboren.
Wenn Sie mit dem aktiven Datensatzmodus nicht vertraut sind und die zusätzliche Flexibilität des Repositorys benötigen oder nicht gerne zu viele anonyme Funktionen sehen, verwenden Sie die Symfony -Doktrin. Glaube ich, dass Symfony der Weg zu monolithischen Anwendungen ist? In gewissem Maße ja. Es ist jedoch wahrscheinlich das eleganteste.
Insgesamt werde ich es im Vergleich zum letzten Jahr nicht als drastische Veränderung nennen. Dennoch müssen wir das Problem aus einer größeren Perspektive betrachten: Eine gut gestaltete Anwendung ist nicht nur MVC; All dies kann im MVC -Stapel implementiert werden, aber zusätzliche Sorgfalt ist erforderlich, um monolithische Anwendungen zu vermeiden.Die Entstehung von Microservices
Während sich diese beiden Konzepte nicht gegenseitig ausschließen, gibt es keinen Grund, Ähnlichkeiten zwischen den beiden zu finden, da sie unterschiedliche, wenn auch sich überschneidende Philosophie darstellen.
Zum Beispiel ist es nicht unbedingt eine geeignete MOA darzustellen, wenn Sie Ihre MVC -Anwendung in einen Container in einen Container einfügen, MySQL in einen anderen Behälter stecken und dann miteinander verbinden. Dies ist sicherlich viel besser als ein besserer Ansatz, als zu versuchen, MAMP, XAMPP oder alles andere unordentliche Ding zu installieren, um eine lokale Maschine zu erhalten, um Ihre Bewerbung zu bedienen.
Darüber hinaus kann es einige Probleme lösen, z.
Zerstörung von Monomeranwendungen
Sie trennen die Ansicht nicht mehr nur vom Modell, sondern trennen jetzt jeden "Block" oder die logische Einheit der Anwendung in einen separaten Dienst, der für die ordnungsgemäße Umstellung seiner eigenen Verantwortlichkeiten ausgelegt ist.
Wenn Ihre MVC -Anwendung über einen "Suche" -Controller, Operationen und verwandte Modellmethoden verfügt, haben wir bereits Beispiele für monolithische Anwendungen.
Stattdessen bieten wir mit der MOA -Methode einen Service für jede Verarbeitungseinheit an. Zum Beispiel:
Mit MOA läuft jeder Dienst in seiner eigenen Umgebung, und als Entwickler und vor allem können wir als Architekt frei haben, um einen bestimmten Bedarf zu lösen.
Wenn ich beispielsweise einen Bildverarbeitungsdienst in einer Laravel-Umgebung schreiben würde, kann ich Tools wie Php-GD2-Erweiterungen verwenden, die möglicherweise nicht die effizienteste Methode zum Verarbeiten von Bildern sind. Der C -Service, der meine Bildverarbeitungsanforderungen erledigt, ist möglicherweise viel schneller und ist sicherlich leistungsfähiger im Maßstab. Um weiter auszuarbeiten, können wir nun die Ausgabe des Bildverarbeitungsdienstes übernehmen und ihn an den DataStore -Dienst, den CloudStorage -Dienst und den Warteschlangen -E -Mail -Dienst senden.
Verwenden einer Reihe von Cron -Jobs und möglicherweise einigen separaten MVC -Anwendungen und benutzerdefinierten Skripten, um dieselbe Herausforderung zu lösen, das haben wir in der Vergangenheit gemacht (d. H. Vor 2 Jahren). Es ist Zeit, vorwärts zu gehen.
Hier beginnt das Problem (oder endet, je nachdem, wohin Sie gehen). Einerseits ist es schwierig, monolithische Anwendungen zu skalieren, und wenn Sie im selben MVC-Stapel immer mehr Logik aufbauen, können Sie auf eine gut strukturierte Anwendung stoßen, aber seine Komplexität ist furchterregend.
Andererseits, wenn Sie Tausende von Microservices in verschiedenen Sprachen bauen, wie können Sie dieses Chaos verwalten?
Es wurde mehr als eine Katastrophe gemeldet.
Es gibt verschiedene Container -Orchestrierungstools (wie Kubernetes, Swarm, Mesos), Container -Bereitstellungsdienste (d. H. GKE und AWS -ECS), aber nur wenige Unternehmen haben die Docker -Architektur beherrscht. Es gibt in der Tat einige Erfolgsgeschichten über den Aufbau der Infrastruktur mit Docker oder anderen Containertechnologien (d. H. GKE). Die meisten dieser Fälle stammen von Unternehmen, die die Ressourcen von Architekten, DevOps, DBAs und Ingenieuren übernehmen können. Trotzdem gibt es vorerst unzählige Debatten darüber, wie ein gut arrangiertes und elegantes MOA bereitgestellt werden kann. In diesem Fall ist eine Größe für alle Situationen absolut nicht geeignet, und es gibt viele Möglichkeiten, Ihre Herausforderung zu lösen.
In beiden Fällen können Sie dieses Problem nicht alleine lösen (DevOps ftw!) Und es muss nur nach Erreichen einer relativ großen Skala gelöst werden. Vielleicht ist jetzt nicht die beste Zeit, um zu überarbeiten.
Für heute (und diejenigen, die sich mit Anwendungen mit geringer Komplexität oder Verkehrsbedarf befassen) besteht ein glücklicher Zwischenansatz darin, viele typische Dienste an Drittanbieter zu laden. Fast alles ist jetzt als Service erhältlich. Hintergrundjobs, Bildverarbeitung, Authentifizierung, Datenanalyse, Protokollierung, E -Mail -Senden, Warteschlangensysteme müssen nicht in demselben MVC -Stapel eingebaut werden, und Architekten sollten überlegen, was für eine niedrige monatliche Gebühr in das SaaS -System abgeladen werden kann (d. H., Algoliensuche) oder ein benutzerdefinierter Docker -Dienst, der in einigen Cloud -Räumen ausgeführt wird, die eine nervige Bildverarbeitung verarbeiten.
Der Punkt hier ist ich, dass Sie nicht in ein neuarchitektisches Projekt eintauchen, nicht alles wegwerfen sollten, was Sie heute haben, und Docker-Schwärme veröffentlichen, wo immer Sie sich vorstellen können. Die Grundlage für die Verbesserung kann allmählich durch Entkoppelung möglicher Teile, das Verständnis von Engpässen im System und die Anwendung des Konzepts der Trennung von Bedenken in diese Problembereiche eingeführt werden.
2017 werden uns mehr Gespräche und Produktionsbereitstellungen über Container-basierte MOA bringen. Meine Ansichten und mein Unsinn über Docker, die Verwendung von Golang oder Knoten bedeutet nicht, dass PHP "tot" oder so etwas ist ... Ich habe das Gefühl, wir müssen als Entwickler dem Rudel voraus sein. Wenn Microservices dort sind, wo dort ist, Warum dann nicht Golang lernen? Es ist ideal für die Entwicklung kleiner Containeranwendungen (aufgrund des kleinen Fußabdrucks, der schnellen Geschwindigkeit und der parallele Verarbeitung). Node und Golang machen Spaß, weil Sie es Ihnen ermöglichen, kleine Dienste zu erstellen, die Teil großer Stämme sind, die sie miteinander verbinden und sie als epische Schwärme für Docker -Container veröffentlichen, wenn Sie es vorziehen. All diese fantastischen Spitzenlösungen und Sprachen bedeuten jedoch nicht, dass PHP daher nicht mehr relevant oder „tot“ ist. Wir werden sicherlich über eine Weile den MVC Stack und die API -Endpunkte aufbauen.
Ein Problem, das mit MOA nicht gelöst wurde, ist, dass Container uns helfen, monolithische Anwendungen im Backend zu beseitigen, aber immer noch viele architektonische Probleme in der Front-End-Schicht, in der Benutzeroberfläche oder in der Ansichten ausgesetzt sind. Wir können eine sehr leistungsstarke Backend -Anwendung erstellen, aber schließlich wird sie in JSON reagieren, was in der Kundenanwendung irgendwie gerendert werden muss. Stammt das endgültige Antwortobjekt von einem einfachen PHP (z. B. einem lumengetriebenen Endpunkt (URL)) oder einer Reihe von Entscheidungs- und Verarbeitungseinheiten, die von einer Nachrichtenschnittstelle entkoppelt sind? Es hängt wirklich sehr von Ihren Anforderungen und den Anforderungen Ihrer Bewerbung ab.
In diesem Jahr erfahren Sie mehr über Laravel, konzentrieren Sie sich auf Docker, Golang und konzentrieren Sie sich absolut auf den Einsatz von Pipelines. Die Umwandlung von lokal zu Produktion sollte glatter sein als seit einiger Zeit, insbesondere beim Aufbau von MVC -Anwendungen.
Das Model-View-Controller-Framework (MVC) in PHP ist ein Entwurfsmuster, das eine Anwendung in drei miteinander verbundene Komponenten unterteilt. Die Modellkomponente entspricht dem Benutzer, der Logik verwendet, die sich auf alle Daten beziehen. Die Ansichtskomponente wird für die gesamte UI -Logik der Anwendung verwendet. Andererseits fungiert der Controller als Schnittstelle zwischen dem Modell und den Ansichtskomponenten, um alle Geschäftslogik- und eingehenden Anforderungen zu verarbeiten.
PHP -Entwicklung unter Verwendung des MVC -Frameworks hat viele Vorteile. Es bietet eine klare Trennung von Bedenken, was den Code erleichtert, um zu warten und zu verstehen. Es fördert auch die Wiederverwendbarkeit und Skalierbarkeit des Codes, sodass Entwickler robuste und groß angelegte Anwendungen erstellen können. Darüber hinaus werden MVC-Frameworks häufig mit integrierten Tools und Bibliotheken ausgestattet, um Aufgaben wie Datenbankabstraktion, Formularvalidierung, Sitzungen und Cookie-Verarbeitung zu erleichtern.
Im Jahr 2017 umfassen einige der besten PHP -MVC -Frameworks Laravel, Symfony, Codesigniter, Yii2 und CakePhp. Laravel ist besonders beliebt für seine elegante Syntax, leistungsstarke Merkmale und eine lebendige Entwicklergemeinschaft. Symfony wird auch häufig für sein hohes Maß an Flexibilität und modularer Architektur verwendet.
Auswahl des richtigen PHP -MVC -Frameworks hängt von mehreren Faktoren ab, einschließlich der Größe und Komplexität des Projekts, des Fachwissens des Teams, der Community und Unterstützung des Rahmens, seiner Leistung und Skalierbarkeit und der beteiligten Lernkurve. Es wird empfohlen, verschiedene Frameworks zu untersuchen und auf der Grundlage dieser Faktoren zu vergleichen, bevor sie eine Entscheidung treffen.
Im PHP -MVC -Framework geht ein Benutzer zuerst an den Controller, der das entsprechende Modell zur Verarbeitung der Daten identifiziert. Das Modell interagiert dann mit der Datenbank, verarbeitet die Daten und sendet sie an den Controller zurück. Der Controller lädt dann die entsprechende Ansicht, die dem Benutzer Daten in einem benutzerfreundlichen Format vorlegt.
Laravel ist ein PHP -MVC -Gerüst, das für seine elegante Syntax und reichhaltige Merkmale bekannt ist. Es bietet verschiedene Tools für Routing, Authentifizierung, Sitzungen, Caching und andere Aufgaben. Laravel hat auch eine lebendige Gemeinschaft und eine große Menge an Dokumentation, die es zu einer beliebten Wahl für Entwickler macht.
Die Lernkurve des PHP -MVC -Frameworks kann variieren. Einige Frameworks wie Laravel und Codesigniter sind für ihre Einfachheit bekannt und relativ leicht zu lernen. Andere Rahmenbedingungen wie Symfony und Yii2 können mehr Zeit in Anspruch nehmen, um zu beherrschen, da ihre Funktionen und Konzepte komplex sind.
Ja, Sie können PHP ohne MVC -Framework verwenden. Die Verwendung von Frameworks kann jedoch Ihren Entwicklungsprozess effizienter gestalten und Ihr Code ist jedoch einfacher zu warten, insbesondere in großen Anwendungen.
Die Datenbankabstraktion im PHP -MVC -Framework bezieht sich auf die Praxis, die Details der Datenbankvorgänge zu verbergen, um zu vermeiden, dass sich der Rest der Anwendung auswirkt. Auf diese Weise können Entwickler unabhängig vom zugrunde liegenden Datenbanksystem mit der Datenbank mit einer konsistenten API interagieren.
Um mit dem PHP-MVC-Framework zu beginnen, sollten Sie zuerst PHP und objektorientierte Programmiergründe verstehen. Sie können dann einen Framework auswählen, der Ihren Anforderungen entspricht, und über seine offiziellen Dokumentation, Online -Tutorials und Community -Foren zu lernen.
Das obige ist der detaillierte Inhalt vonDer Stand der PHP -MVC -Frameworks im Jahr 2017. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!