Ist es sinnvoll, beim Erstellen einer großen Webanwendung mit PHP ein Framework zu vermeiden?

9

Ich bin seit einigen Jahren Entwickler von PHP-Webanwendungen und habe meinen Anteil an MVCs und Frameworks. Zuerst dachte ich, sie wären das Beste seit geschnittenem Brot; alles schien sehr einfach zu implementieren zu sein.

Jetzt scheint es jedoch so, als würde das Framework umso schwieriger, je komplexer die Anwendung wird. Daher muss ich Problemumgehungen entwickeln, um sie zu überwinden. Solche Problemumgehungen sind normalerweise ziemlich entmutigend und komplex, da ich mich mit dem Kerncode des Frameworks befassen und Änderungen vornehmen muss, damit er sich so verhält, wie ich es möchte.

In einem meiner Projekte, in denen ich Slim (C) + Idiorm (M) + Twig (V) verwende (was meiner Meinung nach sehr flexibel ist), muss ich eine benutzerdefinierte Funktion erstellen, um dynamische Daten in übergeordneten Vorlagen anzuzeigen. Ohne Framework hätte ich einfach mysql_query () in der enthaltenen Datei ausführen können.

Okay, Frameworks sind cool, wenn ich eine einfache Firmenprofil-Website erstelle. Ich kann einfach Code in einer Nacht peitschen und sie sind normalerweise bis zum Morgen fertig, und die Menge an guter Codierungspraxis und Entwurfsmustern, die ich von ihnen gelernt habe, ist sehr wertvoll.

Bei einer komplexen Webanwendung wie einem webbasierten All-in-One-Schulverwaltungssystem behindern Frameworks normalerweise meinen Geschäftsprozess, wie im obigen Beispiel.

Meine Frage lautet also: Ist es in Ordnung, einfach zu den Grundlagen zurückzukehren und Standard-PHP-Code und -Bibliotheken für mein nächstes Projekt zu verwenden, bei dem es möglicherweise eine Unmenge von Frameworks und Bibliotheken gibt, vorausgesetzt, ich kann ausreichend gute Codierungspraktiken anwenden und vernünftigen Entwurfsmustern folgen wie MVC? Mein Entwicklungsteam ist ziemlich klein: nur 2 Programmierer und 1 Designer. Der andere Programmierer stimmt meinen obigen Gedanken zu.

Furunomoe
quelle
1
"Je komplexer die Anwendung wird, desto mehr Probleme habe ich mit den Frameworks." Dies ist nur argumentativ und subjektiv. Können Sie diese Art der Beschwerde entfernen und zur eigentlichen Frage gelangen? Können Sie konkrete Beispiele für ein Problem liefern, das Sie lösen möchten? Wenn dies nur "Ich mag keine Frameworks" ist, ist es keine wirklich gute Frage. Vielleicht könnten Sie sich auf etwas konzentrieren, auf das es eine echte Antwort gibt, nicht auf das Teilen von Meinungen.
S.Lott
@ S.Lott: Nun, ich gebe ein Beispiel in meiner Frage. Und eigentlich hasse ich Frameworks nicht. Ich möchte nur wissen, was die Leute darüber denken, dass sie heutzutage kein PHP-Framework verwenden.
Furunomoe
"Ich musste oft eine benutzerdefinierte Funktion erstellen, um dynamische Daten anzuzeigen"? Ist kein sehr detailliertes Beispiel. Es ist nicht klar, warum oder wie das Framework Sie gescheitert ist. Es besteht die sehr entfernte Möglichkeit, dass Sie das Framework falsch verwendet haben.
S.Lott

Antworten:

17

Meine Erfahrung ist so ziemlich das Gegenteil von Ihrer. Wenn Sie kleine, schnelle Dinge erledigen, kann ein Framework ein wenig "in die Quere kommen", da Sie Ihren Code auf eine bestimmte Weise auslegen und sorgfältig überlegen müssen, bevor Sie fortfahren. Wenn mysql_querySie direkt zu Ihnen springen, können Sie Ihren Prototyp viel schneller zum Laufen bringen.

Bei großen, komplexen Websites ist es jedoch äußerst wichtig , den Code sorgfältig zu gestalten und wirklich darüber nachzudenken, wie Sie Ihren Code schreiben, wenn Sie eine Website wünschen, die in Zukunft gewartet werden kann.

Insbesondere das Hinzufügen von mysql_queryAufrufen zu zufälligen Teilen des Seitenzyklus ist im Allgemeinen eine wirklich schlechte Idee. Vielleicht haben Sie hier und da eine, und es ist keine große Sache, aber bald haben Sie ein Dutzend überall verteilt und Sie fragen sich, warum das Rendern Ihrer Seiten nur 3 Sekunden dauert. Oder Sie ändern Ihr Schema und scheinbar nicht zusammenhängende Abschnitte der Site aus unbekannten Gründen.

Dean Harding
quelle
1
Natürlich werfe ich mysql_query()hier und da nicht einfach einen Zufall . Ich meine, in klassischem PHP kann ich einfach so etwas wie einen Aufruf hinzufügen Categories::read_all()und das Ergebnis in einer header.php-Datei durchlaufen, während ich in Twig eine benutzerdefinierte Twig-Funktion dafür erstellen muss. Und für das Prototyping liebe ich die
Gerüstfunktionen
1
Sie benötigen kein Framework, um Ihren Code sorgfältig zu gestalten und darüber nachzudenken. Ohne das Framework ist das einfacher. Frameworks erzwingen mittelmäßige Code-Organisationsmuster.
Raynos
3
Frameworks glänzen wirklich, wenn Sie komplizierte Projekte ausführen, da sie eine Reihe von Regeln und Richtlinien definieren, denen Sie folgen müssen. Ich habe Dean's Antwort gegeben, weil dies auch meine Erfahrung war.
Burhan Khalid
7

Meiner Meinung nach sollte ein Framework nur verwendet werden, wenn es Ihnen den Entwicklungsprozess erleichtert und nicht umständlich ist. Es ist nichts Falsches daran, kein Framework zu verwenden oder ein eigenes zu erstellen, insbesondere für kleine Projekte.

Natürlich müssen Sie immer noch auf die Struktur- und Sicherheitsaspekte achten, aber wenn Sie bedenken, dass Sie seit vielen Jahren Frameworks verwenden, kennen Sie diese Aspekte wahrscheinlich bereits in- und auswendig.

Bei größeren Projekten stimme ich den anderen zu, was bedeutet, dass die Verwendung eines Frameworks auf lange Sicht wahrscheinlich die beste Option sein wird.

Daniel Scocco
quelle
Was für eine kleine Site einfacher ist, ist für eine große möglicherweise nicht einfacher. Und umgekehrt.
Goran Jovic
1
@ Goran Jovic, stimmte zu.
Daniel Scocco
1
+1 für building your own. Unabhängig davon, ob Sie es realisieren oder nicht, werden Sie am Ende zahlreiche Hilfsfunktionen und / oder Klassen haben, die als Ihr eigenes Framework angesehen werden können.
Izkata
5

Meine Erfahrungen mit serverseitigen "Frameworks" waren zum Beispiel ziemlich unangenehm:

A) Jar-Dateihölle, in der Frameworks miteinander oder mit dem App-Server wegen nicht kompatibler Versionen von Dingen in Konflikt stehen, von denen Sie nichts wollen und nichts wissen und die Sie sowieso nicht diktieren können, da dies Sie daran hindert, auf zu implementieren mehrere Server.

B) Katastrophale Explosion der einfachsten Objekterstellung in Tausende unnötiger SQL-Ausführungen.

C) Die bizarre Vorstellung, dass das Codieren von 100 XML-Zeilen irgendwie einfacher oder zuverlässiger ist als das Codieren von 2 Java-Zeilen.

D) Die Notwendigkeit, Hunderte von Zeilen völlig unnötiger serverseitiger POJOS zu schreiben, um clientseitigen Objekten in einer anderen oder manchmal mehreren anderen Sprachen (C # JS usw.) zuzuordnen.

E) Sie haben keine Ahnung, was wirklich passiert ist, wenn Sie einen 30-Level-Deep-Stack-Trace erhalten, der nicht einmal die Codezeile enthält, die Sie zum Aufrufen des Frameworks verwendet haben.

Sei ein Abtrünniger, schreibe dein eigenes Framework ... du wirst es nicht bereuen, solange du vorhast, alle unnötigen Dinge zu beseitigen, die die anderen dich täuschen, wenn du denkst, dass du sie brauchst. Dann werden Sie alles verstehen, es wird in Kb anstelle von Mb ausgeliefert und es wird wahrscheinlich "überall laufen", was eines der Grundprinzipien von Java war, nicht wahr?

Versuchen Sie, so zu denken: "Warum brauche ich das? Ist es nur, um das Framework glücklich zu machen?" .. Wenn ich das nicht brauche, was brauche ich dann noch nicht?

Chris Harlow
quelle
4

Vor langer Zeit gab es eine Präsentation der Django-Entwickler, die ich derzeit nur schwer finden kann, aber sie sprechen über das "Tal der Effizienz", in dem ein Framework Sie produktiver macht.

Angenommen, Sie kennen das Framework nicht, wenn Sie ein Projekt starten, ist Ihre Produktivität zunächst sehr gering. Sie lernen eher die Konvention des Frameworks als die Sprache (die Sie hoffentlich bereits kennen).

Nach kurzer Zeit haben Sie die Konventionen aufgegriffen, und hier leuchten die Frameworks wirklich - plötzlich geht Ihre Produktivität durch das Dach und Sie machen Fortschritte und erstaunliche Geschwindigkeit durch die Entwicklung.

Letztendlich wird das Projekt jedoch so groß, dass das Framework eher eine Einschränkung als ein Segen ist, und Sie werden sehen, wie Sie sich gegen das Framework auflehnen, um zu versuchen, einige Funktionen zu implementieren.

In der Präsentation wird erwähnt, dass kleinere Projekte, wenn Sie bereits Kenntnisse über die Konventionen des Frameworks haben, die Effizienz zunächst nicht beeinträchtigen.

Bei kleinen Projekten (meiner Erfahrung nach weniger als 500 Stunden) ist Ihre Effizienz mit einem Framework wahrscheinlich höher als Ihre Effizienz ohne. Sobald Sie einen bestimmten Schwellenwert erreicht haben (zwischen 500 und 800 Stunden, IME), stellen Sie fest, dass das Framework Einschränkungen bietet.

Vor diesem Hintergrund bieten Frameworks einen viel größeren Vorteil als nur Effizienz - ein Framework wie Symfony oder Django oder (ich nehme an) Rails bietet eine Konvention, die es einem Team ermöglicht, sich dynamisch zu bewegen, und Kunden oder Produktbesitzern ermöglicht, ihre Mitarbeiter zu wechseln, ohne dies zu erfordern Die neue Ressource zum vollständigen Neulernen eines neuen Systems - Wenn sie mit der Konvention eines Frameworks vertraut sind und diese Konvention befolgt wurde, sind sie anfangs viel produktiver als sonst.

Jonathan Rich
quelle
4

Ein gut gestalteter Rahmen sollte dem Programmierer helfen und nicht behindern. Wenn Ihnen das von Ihnen verwendete Framework zu sehr im Weg steht, würde ich vorschlagen, ein anderes Framework zu verwenden. Jeder hat seinen eigenen Codierungsstil und seine eigenen Vor- und Nachteile.

Trotzdem scheint das Zend-Framework heutzutage sehr beliebt zu sein, und ehrlich? Ich kämpfe manchmal darum zu verstehen warum. Ich musste in der Vergangenheit damit arbeiten und die Architektur hat mir kein bisschen gefallen. Die Zend_Form-Klasse ist lächerlich überarbeitet, ihr Dekorationssystem ist äußerst schrecklich im Gebrauch, und die Dekorateure binden Formen an Ansichten, wodurch ein grundlegendes Konzept von OOP gebrochen wird, das besagt, dass Objekte lose gekoppelt werden sollten. Es ist auch viel Code als Singletones implementiert (die aus Gründen, die gut dokumentiert sind, schlecht sind, so dass ich nicht wiederhole), und das Registrierungsobjekt trägt auch dazu bei, einen schlampigen Codierungsstil zu fördern.

Ich habe gehört, dass Zend Framework 2 (derzeit in der Beta) ein viel besseres Produkt ist, aber der schlechte Geschmack von Zend 1 in meinem Mund bedeutet, dass ich es nicht eilig habe, es auszuprobieren.

An diesem Punkt schimpfe ich nur noch. :) Es gibt viele Frameworks, jedes mit seinen Vor- und Nachteilen. Ich würde vorschlagen, einige davon zu evaluieren.

GordonM
quelle
3

Was Sie beschreiben, wurde in der Vergangenheit als "abstraktionsinduzierte Komplexität" bezeichnet. Das einzige Papier zur Verwaltung ist: Verwalten der durch Abstraktion induzierten Komplexität von David Keppel. Keppel würde vorschlagen, dass die Frameworks ein Design haben, das durch Abstraktion verursachte Komplexität verursacht.

Bruce Ediger
quelle
2

Die Arbeit mit einem Framework hilft Ihnen, Ihre Entwicklung zu beschleunigen, indem Sie das Rad nicht neu erfinden . Framework bietet Ihnen auch die Tools, mit denen Sie Ihre Anwendung richtig entwerfen können (es hindert Sie jedoch nicht daran, schlechte Entwurfsentscheidungen zu treffen, z. B. direkt aus der Ansicht auf die Datenbank zuzugreifen).

Wenn Sie eine benutzerdefinierte Funktionalität benötigen, kann es manchmal länger dauern, diese ordnungsgemäß zu schreiben. Wenn Sie jedoch ständig hacken und Problemumgehungen finden, arbeiten Sie gegen das Framework oder das Framework entspricht nicht Ihren Anforderungen.

Unter dem Strich kann die Verwendung eines großen Frameworks für einfache Projekte (z. B. das Anzeigen einiger Felder aus einer Datenbank) manchmal übertrieben sein. Verwenden Sie für große oder komplexe Projekte ein Framework.

Christian P.
quelle
1

Das Schreiben eines eigenen Codes hat mehrere Seiten im Vergleich zur Verwendung eines Frameworks:

Die Größe, das Grundwissen und die Erfahrung des Teams, mit dem Sie arbeiten : Wenn sie nie ein Framework verwendet haben oder eine Vorstellung davon haben, wie eine Anwendung zu erstellen ist, sind Sie mit einem gut dokumentierten Framework mit vielen Beispielen besser und sehen, dass Sie sie beschleunigen oben.

Die Größe der Anwendung : Sie wissen nie im Voraus, wie sie verwendet wird. Sie sollten also besser auf Wachstum und Veränderung vorbereitet sein. Kann Ihr Framework, das Sie in einer Nacht codieren möchten, mit den Anforderungen des Managements wachsen? Ändern Sie die Feldtypen in der Datenbank und die Implementierung dauert eine Minute oder einen Tag. Das ist mein Punkt hier.

Die Vorbereitung : Wenn Sie ein Framework verwenden, können Sie mit dem Entwerfen der Anwendung beginnen, anstatt den Kern Ihrer Anwendung zu codieren. Verwenden Sie eines, bei dem Sicherheit und Bereitstellung wichtige Teile sind. Dies kostet so viel Zeit. Jedes Mal.

Ich argumentiere immer mit "dem Management", um Symfony2 zu verwenden, da es ein Framework für die Webentwicklung ist. Das Management hält es für zu groß, es kostet Geld und scheut Programmierer, da die Lernkurve steil ist.

blenden
quelle
0

Frameworks werden weiterhin für jede moderne Sprache verwendet, insbesondere für große Projekte. Je größer ein Projekt wird, desto wichtiger ist ein Framework. Sie wissen also, wo sich die Logik für alles befindet, und jedes Feature hat ein ähnliches Layout. Dies erleichtert das Ändern eines Projekts und das Erlernen, wenn Sie wissen, wo Sie nach dem gesamten Datenzugriff oder der gesamten Präsentation suchen müssen oder wo Geschäftsregeln verwaltet werden.

Es ist jedoch erforderlich, ein Framework auszuwählen, das zum Projekt passt. Für eine Unternehmenslösung ist jedoch ein unternehmensfähiges Framework erforderlich. Dies ist das Problem, auf das Sie bei der Verwendung von PHP stoßen werden. Viele (die meisten) Frameworks sind nicht für die Verwendung in großem Maßstab vorgesehen, funktionieren jedoch gut für kleinere persönliche Websites. Für etwas wie das von Ihnen erwähnte Schulverwaltungssystem wird ein robusteres Framework erforderlich sein, und es kann einige Zeit dauern, bis ein geeignetes Framework in PHP gefunden ist.

Ryathal
quelle