it-swarm.com.de

Architektur besser geeignet für Web-Apps als MVC?

Ich habe Zend und seine MVC-Anwendungsstruktur für meinen neuen Job gelernt und fand heraus, dass die Arbeit mit mir aus Gründen, die ich nicht so recht verstehen konnte, mich störte. Dann stieß ich während meines Studiums auf Artikel wie MVC: No Silver Bullet und diesen Podcast zum Thema MVC und Webanwendungen. Der Typ im Podcast hat sich gegen MVC als Architektur für Webanwendungen sehr gut ausgesprochen und viel von dem getroffen, was mich am Kopf störte. 

Die Frage bleibt jedoch, wenn MVC nicht wirklich gut für Webanwendungen geeignet ist. Was ist das? 

47
GordonM

Es hängt alles von Ihrem Codierstil ab. Hier ist das Geheimnis: Es ist unmöglich, klassische MVC in PHP zu schreiben.

Jeder Rahmen, den Sie behaupten können, belügt Sie. Die Realität ist, dass Frameworks selbst MVC nicht implementieren können - Ihr Code kann dies. Das ist aber kein so guter Marketing-Pitch, denke ich. 

Um ein klassisches MVC zu implementieren, müssen Sie zunächst über persistente Modelle verfügen. Darüber hinaus sollte Model View über die Änderungen informieren (Beobachtermuster), was auch auf Ihrer Vanilla PHP - Seite nicht möglich ist (Sie können in der Nähe der klassischen MVC etwas tun, wenn Sie Sockets verwenden, dies ist jedoch für eine echte Website nicht praktikabel).

In der Webentwicklung haben Sie tatsächlich 4 andere von MVC inspirierte Lösungen:

  • Model2 MVC: View fordert Daten vom Modell an und entscheidet dann, wie es gerendert wird und welche Vorlagen verwendet werden. Der Controller ist dafür verantwortlich, den Status von Ansicht und Modell zu ändern.

  • MVVM: Der Controller wird gegen ein ViewModel ausgetauscht, das für die Übersetzung zwischen den Erwartungen von View und der Logik von Models verantwortlich ist. Zeigen Sie die Anforderungsdaten vom Controller an, wodurch die Anforderung so übersetzt wird, dass Model sie verstehen kann. 

    Meistens würden Sie dies verwenden, wenn Sie weder die Ansichten noch die Modellebene steuern können. 

  • MVP (was PHP-Frameworks "MVC" nennen): Der Presenter fordert Informationen von Model an, sammelt sie, modifiziert sie und gibt sie an die passive View weiter.

    Um dieses Muster zu erkunden, würde ich Ihnen empfehlen, mit dieser Veröffentlichung zu beginnen. Es wird es ausführlich erklären.

  • HMVC (oder PAC): unterscheidet sich von Modell2 mit der Fähigkeit eines Controllers, Subcontroller auszuführen. Jedes mit einem eigenen Dreiklang aus M, V und C. Sie erhalten Modularität und Wartbarkeit, zahlen jedoch mit einem gewissen Leistungsverlust. 

Sowieso. Die Quintessenz ist: Sie haben MVC nicht wirklich verwendet.

Wenn Sie jedoch alle MVC-ähnlichen Strukturen satt haben, können Sie Folgendes untersuchen:

  • ereignisgesteuerte Architekturen
  • n-Tier-Architektur

Und dann gibt es immer das Paradigma DCI , aber es hat einige Probleme, wenn es auf PHP angewendet wird (Sie können keine Klasse in PHP .. nicht ohne hässliche Hacks anwenden).

98
tereško

Meiner Erfahrung nach überwiegen die Vorteile einer MVC-Architektur bei Weitem die Kosten und den offensichtlichen Overhead bei der Entwicklung für das Web. 

Für jemanden, der mit einem komplexen MVC-Framework anfängt, kann es etwas entmutigend sein, die drei Schichten zusätzlich zu trennen und ein gutes Gefühl dafür zu bekommen, was wo hingehört (einige Dinge liegen auf der Hand, andere können durchaus grenzwertig sein) und neigen dazu, gute Diskussionsthemen zu sein). Ich denke, dass sich diese Kosten langfristig bezahlt machen, insbesondere wenn Sie erwarten, dass Ihre Anwendung über einen angemessenen Zeitraum wächst oder gewartet wird. 

Ich hatte Situationen, in denen die Kosten für die Erstellung einer neuen API, die es anderen Clients ermöglichte, eine Verbindung zu einer vorhandenen Webanwendung herzustellen, aufgrund der guten Trennung der Schichten extrem niedrig waren: Die Geschäftslogik war also überhaupt nicht mit der Präsentation verbunden es war kuchen.

Im derzeitigen MVC-Framework-Ökosystem glaube ich, dass Ihre Laufleistung sehr unterschiedlich sein kann, da die Grundsätze allgemein sind, aber es gibt viele Unterschiede zwischen Zend, Django, RoR und SpringMVC.

Wenn es wirklich andere gute Alternativen zu diesem Paradigma gibt ... Ich bin sehr an den Antworten interessiert!

Entschuldigung für die leichte Textwand!

4
pcalcao

Ich denke, das hängt davon ab, was Sie persönlich tun wollen. Magenta verwendet MVC ziemlich erfolgreich und macht es relativ einfach, neue Funktionen hinzuzufügen oder vorhandene zu ändern. 

Wenn Sie versuchen, etwas ziemlich einfaches zu machen, kann es natürlich übertrieben sein, mit einer MVC-Architektur zu arbeiten. 

0
jprofitt

Es ist alles Vorliebe. Ich habe mit alten Strukturen wie XTemplates und Smarty gearbeitet und bin jetzt zu Codeigniter und Kohona gewechselt. Ich mag sie sehr und sie arbeiten sehr gut für alles, was ich im Web mache. Für Telefonanwendungen kann ich Controller für die Funktionen einrichten, die für die Durchführung der Datenabrufe erforderlich sind. Ich arbeite sowohl in der Linux-Welt als auch in der Windows-Welt. Beim Erstellen von ASP.NET-Websites sehe ich keine andere Möglichkeit, Websites zu erstellen, außer MVC. Webanwendungsprojekte in Visual Studio werden immer noch verwendet, aber ich bevorzuge es nicht mehr. MVC-Projekte über Visual Studio sind so einfach zu bedienen und einzurichten. Sie können mit der rechten Maustaste auf Ihre Controller-Methoden klicken und Ansichten automatisch erstellen. In jeder Struktur gibt es eine gute und eine schlechte, aber es ist Sache des Entwicklers, das zu verwenden, was seinen Bedürfnissen entspricht.

0
vou xiong