Ist Unit Testing das Hauptziel von MVC Pattern?

14

Kürzlich lautete in einem Interview eine der Fragen: "Warum verwenden wir MVC?" Ich habe nur geantwortet, dass es viel näher ist, wie viele der Systeme der realen Welt sind! Erläuterte die Vorteile, die es in Bezug auf Wartbarkeit, Skalierbarkeit usw. hat. Sie waren jedoch nicht überzeugt und erklärten mir schließlich, dass MVC hauptsächlich verwendet wird, da es „einfache Einheitentests ermöglicht“.

Obwohl ich weiß, dass dies ein gültiger Punkt ist, bezweifle ich immer noch, ob dies der Hauptgrund ist, da (i) auch wenn ich mich entscheide, keine Unit Testcases zu schreiben, MVC eine wahrscheinliche Wahl ist (ii) viele GUI-Systeme, in denen Unit Testcases vorhanden sind, dies nicht tun folge MVC.

Die Frage lautet also: Ist Unit Testing das Hauptziel von MVC Pattern?

EDIT: Ich gehe davon aus, dass sie die einfache testgetriebene Entwicklung / das Schreiben von NUnit-Testfällen erwähnen. Dies liegt daran, dass wir Testfälle für das Modell schreiben können (vorausgesetzt, die Ansicht spiegelt genau die Statusänderungen des Modells wider). Bitte korrigieren Sie mich, wenn ich falsch liege.

WinW
quelle
11
Du hast das Interview nicht bestanden, oder? Wenn nein, viel Glück. Ich werde nicht in ein Unternehmen eintreten, das von Anfang an eine sehr falsche Einstellung hat. :) Unit Testing Auf jeden Fall nicht das primäre Ziel. Dies kann beim Testen der Einheit hilfreich sein, da das Anliegen alle getrennt, aber definitiv nicht das primäre Ziel ist.
Rudy
4
Denken Sie daran, dass das Interview in beide Richtungen funktioniert. Du prüfst sie so sehr, wie sie dich auf die Probe stellen. Sie haben gerade eine rote Fahne: Gehen Sie nicht in diese Firma. Sie haben keine Ahnung, aber noch schlimmer, sie glauben, dass sie es nicht merken, also keine Hoffnung auf Besserung. Wenn Sie sich entscheiden, in die Firma zu gehen, werden Sie mit vielen kafkaesken Situationen konfrontiert sein.
Deadalnix
@Rudy Nein, ich habe nicht bestanden: P, es war das Dev Center einer führenden Investmentbank. Auch die Jungs sahen bei anderen Fragen gut und sehr authentisch aus und deshalb wurde ich damit verwechselt.
WinW
@deadalnix, ja wahr .. fühle mich genauso, nachdem ich die Antworten hier gesehen habe. Aber ich war mir nicht sicher, bevor ich es hier gepostet habe.
WinW
Ich stimme Deadalnix voll und ganz zu. Gehen Sie nicht zu dieser Firma.
Rudy

Antworten:

33

Das vorrangige Ziel wäre die "Trennung von Anliegen", da das Modell, die Ansicht und der Prüfer unterschiedliche Verantwortlichkeiten haben.

Der Autor des Originalpapiers von Xerox PARC gibt an, dass:

Der wesentliche Zweck von MVC besteht darin, die Lücke zwischen dem mentalen Modell des menschlichen Benutzers und dem im Computer vorhandenen digitalen Modell zu schließen.

Wenn Unit-Tests das vorrangige Ziel wären, könnte man Ansichten problemlos Unit-Tests unterziehen. Ein Blick auf die Landschaft der Unit-Testing-Projekte / Frameworks würde ergeben, dass dies der Behauptung durchaus widerspricht. Normalerweise werden zum Testen der Ansicht Integrationstests und Funktionstests verwendet.

Vineet Reynolds
quelle
2
Ich würde sagen, dass die Hauptziele darin bestehen, die Metapher für direkte Manipulation (so steht es im Zitat) und die Ermächtigung der Benutzer (ursprünglich war vorgesehen, dass nur die Modelle von Programmierern geschrieben werden, die Views und Controller von Endbenutzern).
Jörg W Mittag
14

Meiner Meinung nach lautet die Antwort „Nein“. Vielleicht war dies der Hauptvorteil, der in dieser speziellen Organisation beobachtet wurde, aber ich würde es nicht als "primäres Ziel" bezeichnen.

Ich denke, es wäre nicht allzu schwierig, MVC auf eine Art und Weise zu implementieren, die zum Teufel schwer zu testen ist.

Auf der anderen Seite könnte man sagen, dass so ziemlich jedes Muster (mit Ausnahme von Dingen wie Singleton) das Testen von Einheiten erleichtert, da sie am häufigsten die Entkopplung fördern - aber ist es ihr „primäres Ziel“? Kaum.

Mchl
quelle
12

MVC (wie die meisten bekannten Designmuster) gab es schon, bevor Unit-Tests bekannt wurden. Das GoF-Buch wurde 1994 veröffentlicht - und sie dokumentierten nur die Muster, die vor Jahren (wenn nicht Jahrzehnten) verwendet wurden. (Und es gibt keine Erwähnung von Unit-Tests.) Über Unit-Tests kann ich keine genaue Zeit finden, wann es "öffentlich" wurde - ich persönlich habe darüber in Artikeln gelesen, die sich auf Extreme Programming beziehen, und im ersten XP-Buch kam im Jahr 1999 heraus.

Unit-Tests könnten daher offensichtlich nicht das Hauptziel sein, Muster zu erfinden / zu dokumentieren - obwohl man nur sagen kann, dass Muster, wenn sie gut angewendet werden, Unit-Tests erheblich erleichtern.

Péter Török
quelle
Die Timeline-Referenz ist eine nette Erwähnung, die das Argument logisch stützt.
WinW
Es scheint ein kleines Problem mit dem Datum zu geben. Laut heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html wurde MVC 1978 als Designlösung für ein bestimmtes Problem konzipiert. Keine Sorge ... Trotzdem ist Ihre Argumentation gut - MVC war schon lange vor Beginn der Tests da.
WinW
Unit-Tests gibt es seit mindestens den 1980er Jahren. Ich begann meine Karriere damals und wir hatten Unit-Tests für einige der Projekte, an denen ich gearbeitet habe (und es schien damals keine neue Idee zu sein). Wir hatten einfach nicht die vorgefertigten Frameworks, die wir jetzt haben.
GreenMatt
2
@GreenMatt, ich weiß, Unit-Tests wurden nicht von Kent Beck erfunden, sondern nur wiederverwendet :-) Aber AFAIK war relativ unbekannt, bevor XP und Agile damit begannen, sie zu verbreiten.
Péter Török
@ Péter Török: Ich erinnere mich, dass ich 1) meinen eigenen einfachen Code geschrieben habe, um einzelne Funktionen bis zum College zu testen (für mich Anfang Mitte der 1980er Jahre) und dass ich die Idee von jemand anderem bekommen habe; 2) Sehen von Darstellungen und Lesen von Artikeln über das Wasserfallmodell in den 80ern oder 90ern mit einer Phase namens "Coding and Unit Testing" (im Gegensatz zu "Coding"). (Sorry, ich erinnere mich nicht , wo kann so nicht Zitate liefern.) So Unit - Tests gibt es schon und entwickelt für eine ganze Weile.
GreenMatt
2

Ich denke nein, das einfache Testen von Einheiten ist einer der Vorteile, aber es ist Teil einer Sammlung von Vorteilen bei der Verwendung von MVC, zusammen mit den von Ihnen genannten Gründen. Zu sagen, dass es einen einzigen Hauptgrund für die Verwendung von MVC gibt, ist ein Fehler. Es hört sich so an, als würde sich das betreffende Unternehmen für MVC entscheiden, um das Testen von Einheiten zu vereinfachen. Daher halten sie dies für den Hauptgrund. Persönlich bin ich der Meinung, dass MVC aufgrund seiner Einfachheit im Vergleich zu Webformularen einfacher zu entwerfen und zu warten ist, aber jeder Einzelne / jedes Unternehmen hat seine eigenen Gründe, irgendeine Technologie einzusetzen.

Robert Anton Reese
quelle
0

In der ASP.NET MVC-Welt wurden viele Verbesserungen an ASP.NET in das Framework selbst integriert. Der Hauptzweck dieses Entwurfsmusters besteht darin, die Geschäftslogik von der Benutzeroberfläche zu isolieren, um sich auf eine bessere Wartbarkeit, verbesserte Testbarkeit und eine sauberere Struktur der Anwendung zu konzentrieren.

ASP.NET MVC verfügt über bestimmte Funktionen, die es zur besten Option machen, wenn Sie eine oder mehrere der folgenden Optionen benötigen:

Ein hohes Maß an Kontrolle über das generierte HTML : Im Gegensatz zu Web Forms rendern Ansichten in ASP.NET MVC HTML genau so, wie Sie es anweisen. In letzter Zeit wurden Web Forms in diesem Bereich verbessert, haben aber immer noch nicht die Kontrolle, die MVC hat.

Einfacheres Testen von Einheiten : Mit ASP.NET MVC ist es sehr einfach, Testmustern wie der testgetriebenen Entwicklung (TDD) zu folgen. Aufgrund des komplexen Ereignislebenszyklus in Web Forms, der auf einem steuerungsbasierten Framework aufbaut, ist TDD mit MVC viel einfacher.

Trennung von Bedenken : Dies bezieht sich darauf, dass alle Aspekte des Systems klar voneinander getrennt sind. Aufgrund des implementierten Musters ist eine MVC-Anwendung in diskrete und lose gebundene Teile (Modell, Ansichten und Controller) unterteilt, was die Wartung vereinfacht.

Einige der anderen Vorteile sind:

• Das MVC-Muster selbst erleichtert die Verwaltung der Komplexität, indem die Funktionalität der Anwendung klar in drei Hauptteile, das Modell, die Ansicht und den Controller, unterteilt wird.

• ASP.NET MVC-Webanwendungen verwenden weder den Ansichtsstatus noch serverbasierte Formulare. Dies macht das MVC-Framework ideal für Entwickler, die die volle Kontrolle über das Verhalten einer Anwendung haben möchten. Der Anzeigestatus kann sehr groß werden, was ein Problem für Geräte wie Smartphones ist, die über langsame Netzwerke laufen (die Übertragung all dieser Informationen kann sehr langsam sein). Auf einer Web Forms-Seite konnte es nur eine pro Seite geben. Dies ist eine ziemlich große Einschränkung. In MVC gibt es keine solche Einschränkung - Sie können also so viele Elemente haben, wie Sie möchten.

• ASP.NET MVC bietet eine bessere Unterstützung für testgetriebene Entwicklung (TDD).

• ASP.NET MVC eignet sich gut für Webanwendungen, die von großen Entwicklerteams unterstützt werden, sowie für Webdesigner, die ein hohes Maß an Kontrolle über HTML benötigen. ASP.NET MVC-Anforderungsverarbeitung

Arvind Kumar
quelle