Gibt es ein Designmuster außer MVC für das Web?

15

Ich möchte wissen, ob es neben MVC auch Designmuster für das Web gibt.

Ich weiß, dass es Entwurfsmuster gibt wie: Registry, Observer, Factory, ActiveRecord, ... und MVC eine Reihe anderer Entwurfsmuster und Ordnerstrukturen.

Gibt es Entwurfsmuster wie MVC eine Reihe anderer Entwurfsmuster?

Edit: meine Programmiersprache ist PHP.

Saeed M.
quelle
Es gibt immer das BBOM-Muster .
zzzzBov
1
@ Mr-Moqadam, bitte schauen Sie - meta.stackexchange.com/questions/5234/…
Yusubov
Ich glaube, die folgenden Antworten beantworten alle Facetten Ihrer Frage. Sie könnten den Besten akzeptieren und der Gemeinschaft helfen.
Arpith
Was ist mit FBs Flux-Muster?
Muhammad Umer
Siehe auch Erste anzeigen.
Nawfal

Antworten:

25

In der Softwareentwicklung gibt es unterschiedliche Muster. MVP, MVVM, MVC usw. sind einige der bekanntesten. Sie müssen jedoch das spezifische Problem oder die Technologie definieren, die Sie lösen oder verwenden möchten.

Bildbeschreibung hier eingeben

Jedes dieser Muster ist gut, um bestimmte Problemstellungen zu lösen. Das MVP-Muster (Model View Presenter) hilft beispielsweise dabei, die Probleme bei der ASP.NET-WebForms-Entwicklung zu trennen. Es besteht aus der Aufteilung der Zuständigkeiten für das Sammeln, Anzeigen und Speichern von Daten von einer Webseite in separate Objekte: ein Modellobjekt, ein Ansichtsobjekt und ein Presenter-Objekt.

Das bekannteste allgemeine Kochbuch für Designmuster ist Gang of Four (GoF) .

Bildbeschreibung hier eingeben

Bearbeiten: Ich nehme an, dass Sie mehr an der Implementierung von Entwurfsmustern auf der .NET-Plattform interessiert sind

Yusubov
quelle
1
+1 Werden wir mit MVC leben, das als Muster definiert ist, oder mit einer Technik, die bald oder in der Nähe ihres Nachfolgers zu sehen sein wird?
Unabhängige
6
+1, aber MVP, MVVM und MVC sind alle Variationen desselben Themas: Trennung von (g) ui und Modelllogik und Vermittlung durch Dritte (Controller, Presenter).
Marjan Venema
2
@ Mr-Moqadam: MVC sieht auf den ersten Blick wie ein Overkill und kompliziert aus. Es macht das, was Sie tun sollten und trennt Benutzeroberfläche, Logik und Daten. Das einzige, was in der Softwareentwicklung sicher ist, ist der Wandel. Und als Faustregel; 20% entfallen auf Entwicklung, 80% auf Instandhaltung. In dieser Hinsicht ist MVC mit Sicherheit die Mühe wert. Es ist auch das grundlegendste Muster, um dies zu erreichen, denke ich.
Bruno Schäpper
3
@ Mr-Moqadam: Nein, es hilft dir sehr, auch wenn du alleine bist. Und vor allem bei großen Projekten.
Bruno Schäpper
1
@ Mr-Moqadam Wer hat jemals gesagt, dass MVC ein Teamentwicklungsmuster ist? Ich entwickle schon seit langer Zeit alleine mit PHP und MVC ist für mich ein Muss, um die Wartung aufrechtzuerhalten. Haben Sie versucht, PHP-Frameworks zu verwenden?
Songo
7

Ein schönes Muster, das ich vor ein paar Wochen kennengelernt habe, ist MOVE . Es sieht etwas raffinierter aus als MVC, basiert jedoch auf demselben Prinzip. Ein Nachteil von MVC ist, dass Ihre Controller wirklich sehr, sehr groß werden können. Mit dem MOVE-Muster werden Sie dieses Problem ein wenig lösen.

Andere Muster, die von den anderen benannt wurden, sind ebenfalls gute Alternativen.

Jan_V
quelle
Ich dachte, MVC wird mit Thin Controllern beworben ?! Sie kennen das Sprichwort "Thin Controller & Fat Models"
Songo
In Wirklichkeit neigen die Controller jedoch dazu, ziemlich fett zu werden.
26.
2
Das liegt daran, dass Sie die Domänenlogik in die Controller integrieren, was nicht die Absicht der ursprünglichen MVC von Krassner & Pope war. Controller in der ursprünglichen Art und Weise handeln von Eingabehandhabung, z. Verbinden von Mausklicks auf (X, Y) -Koordinaten zu einer Modelloperation (wie z. B. Erhöhen der Temperatur in einer Thermostat-App). Der größte Teil der Controllerschicht im MVC-Sinne ist jedoch vollautomatisiert und daher für den Anwendungsentwickler in einem Framework unsichtbar.
Aadaam
ist MOVE wie Fluss
Muhammad Umer
4

Als Erstes müssen Sie festlegen, was genau Sie tun müssen, um zu entscheiden, ob ein Framework und / oder eine MVC (oder ein anderes Entwurfsmuster) von Vorteil sind.

Frameworks bieten eine konsistente Plattform für die Entwicklung und bieten in der Regel Lösungen für allgemeine Programmieranforderungen (z. B. Datenbankinteraktion, Formularerstellung und -validierung, Benutzerauthentifizierung usw.).

Zumindest für PHP dominiert das MVC / HMVC- Entwurfsmuster in der Regel die verfügbaren Mainstream-Frameworks (z. B. Zend , CakePHP , CodeIgniter usw.), aber es gibt viele verschiedene Entwurfsmuster, die verwendet werden könnten.

MVC ist so beliebt, weil es eine etablierte und verständliche Möglichkeit bietet, Datenmodellierungs- und Verarbeitungslogik von der Ansichts- / Präsentationsschicht zu trennen (was als wünschenswert angesehen wird, um robuste, skalierbare Anwendungen zu erstellen).

Es ist wichtig zu erwähnen (und wie @ Marjan Venema in einem Kommentar zu @ ElYusubovs Antwort ausdrückte), dass MVC, MVP, MVVM und die anderen MV x -Muster (im Prinzip zumindest) alle dasselbe "Entwurfsmuster" sind.

Typischerweise dienen unterschiedliche Entwurfsmuster (oft subtil) unterschiedlichen Zwecken und wurden in mehreren Fällen unter Berücksichtigung einer bestimmten Sprache entwickelt. Ein echtes 'Designmuster' ist jedoch keine feste Regel für die Programmierung, sondern vielmehr ein philosophisches / idealogisches Verständnis der Programmimplementierung, der Designanforderungen und der logischen Funktionen.

Nachforschungen sind der beste Weg, um sich über verschiedene Programmierprinzipien und Best Practices zu informieren. Hier einige Wikipedia-Links, um Ihnen den Einstieg zu erleichtern:

In der Praxis hindert Sie nichts daran, Ihr eigenes "Muster" zu implementieren. Der beste Weg, IMO zu lernen, ist für mich, zumindest, das MVC-Muster nicht vollständig zu verstehen, bis ich anfing, eine Website damit zu schreiben.

Sobald Sie einige der Programmierkonzepte und Best Practices verstanden haben, können Sie diese verwenden, um Ihr eigenes System zu erstellen, um die spezifischen Probleme zu lösen, mit denen Sie konfrontiert sind, und um Ihre Anforderungen zu erfüllen, unabhängig davon, ob sie einem festgelegten Muster entsprechen oder nicht.

Wenn Sie keine spezifischen Probleme zu lösen haben, ist das Erlernen eines der gängigen Frameworks die beste Wahl.

Chris
quelle
3

Eines der bekanntesten Beispiele ist Knockout.js , ein Javascript-Framework, das das MVVM-Entwurfsmuster verwendet . Es gibt hier einen großartigen Artikel über den Stapelüberlauf , in dem das MVC-Framework Backbone.js mit Knockout.js verglichen wird .

Eine Nebenbemerkung ist, dass das MVVM-Entwurfsmuster von Microsoft als Spezialisierung des PM-Entwurfsmusters von Martin Fowler stammt. MVVM wird häufig von WPF-Anwendungen verwendet.

dodgy_coder
quelle
Seite nicht gefunden!
Muhammad Umer
1
@ MuhammadUmer Danke, ich habe den Link aktualisiert. Leider hat StackOverflow diese 1000+ Punkte Frage gelöscht. Glücklicherweise hat die Wayback-Maschine kein striktes Moderationssystem.
dodgy_coder
Überhaupt nicht überrascht ... ich erwarte, dass alle diese Sites auch so sind.
Muhammad Umer
0

Wie ElYusubov betonte, weist das ASP.Net-Framework seit langem MVP- und MVVM-Muster auf, wenn Sie nach relativ gängigen Beispielen suchen. Einer der Hauptunterschiede zwischen MVC und MVVM besteht darin, wie Ihre Entitäten aktualisiert werden. MVC eignet sich besser für den traditionellen zustandslosen oder halbzustandslosen Ansatz von Webanwendungen. Das ASP.Net-Framework hat versucht, dieses Problem zu umgehen, indem Ihr Status in einem Formular eingebettet war (sodass er bei jeder Anforderung wiederhergestellt werden konnte), wodurch die MVP- und MVVM-Muster dort sinnvoller wurden.

Mit HTML5 werden Anwendungen zunehmend JavaScript-lastiger, und ein Großteil ihres Status befindet sich auf dem Client. Dies kann zu einer Wiederbelebung der MVVM-Frameworks führen, und Knockout JS ist ein Beispiel.

Daniel B
quelle
0

Die meisten Muster in freier Wildbahn sind MVC oder ein MVC-Geschmack. Schließlich ist es sinnvoll, Ihre Daten (Modell), die Darstellung (Ansicht) und die Interaktion mit ihnen (Controller) aufzuteilen. Wenn Sie sich MVC ansehen, wie es in den 80er Jahren gegründet wurde, werden Sie feststellen, dass es nie als Webframework gedacht war. So fand ich es im Web weit überfordert.

Ein anderes bekanntes Muster wäre die Service Oriented Architecture (SOA). Darauf aufbauend würde ein moderner Ansatz darin bestehen, eine MVC (oder eine Variante) auf Ihrem Server zu haben, um nur einen Dienst bereitzustellen, mit dem Sie arbeiten können. Auf der Clientseite würde es eine andere MVC-gestaltete Anwendung geben, zum Beispiel eine HTML5- und JavaScript-gesteuerte Webanwendung (zum Beispiel Twitter oder Linked In). Die Client-Anwendung würde Ihren serverseitigen Dienst (die "Ansicht" des Servers) als Modell verwenden. IMHO, dies wäre Stand der Technik und wird wahrscheinlich nur MVC auf der Serverseite beiseite schieben.

Bruno Schäpper
quelle
0

Ich persönlich möchte etwas implementieren, das die Idee der Darstellung von Ressourcenmethoden verwendet , obwohl es in dieser Phase meist nur ein Experiment ist, mehr als alles andere. Einige überzeugende Punkte sind, dass eine HTTP-Anforderung / Antwort besser modelliert wird als MVC (was für langlebige Anwendungen gedacht ist, die auf einem einzelnen Computer ausgeführt werden, im Gegensatz zu kurzlebigen Anforderungs- / Antwortsitzungen). Es hat jedoch den Nachteil, dass Ihre Ressourcen an das Front-End gekoppelt werden, wenn Sie Methoden für die Verarbeitung von GET, POST, PUT, DELETE usw. in Ihre Ressourcen einfügen. Ich denke, ich werde das in eine andere Ebene aufteilen.

GordonM
quelle
0

Es gibt mehr als 1000 Möglichkeiten, mit Ausnahme von MVC, von denen einige MVC ähnlich sind und andere völlig unterschiedlich

zum Beispiel :

  1. Modell-Template-Ansicht - MTV
  2. Model-View-Presenter - MVP
  3. Hierarchischer Model-View-Controller HMVC
  4. Modellansicht ViewModel- MVVM

etc

Saurabh Chandra Patel
quelle
1
dies scheint nicht zu bieten alles wesentliche über gemacht Punkte und erläuterte vor 7 Antworten
gnat
Dies ist die einfachste Antwort auf die Frage, die ich denke.
Saurabh Chandra Patel