Klassisches ASP zu ASP.net oder ASP.net MVC

17

Wir haben eine Webanwendung, die im klassischen ASP entwickelt wurde und sich über 5 Jahre zu ihrer aktuellen Form entwickelt hat, die Hunderte von Seiten, eine riesige Datenbank und mehr als 10000 aktive Benutzer umfasst, die täglich mindestens mehr als 10 Seiten durchgehen.

Jetzt wollten wir es auf die neueste Version von .net aktualisieren. Ursprünglich dachten wir, die gesamte App neu zu schreiben, aber nach der Analyse des Szenarios stellten wir fest, dass dies keine praktikable Option ist, die auch von vielen Experten nicht empfohlen wird. Wir haben uns noch nicht entschieden, wie wir es anders machen sollen, aber wir haben uns Gedanken darüber gemacht, wie wir das Umschreiben von Gesichtern erreichen können.

Option 1: Wir dachten daran, die Hauptmodule in dieser Anwendung zu identifizieren und nacheinander neu zu schreiben, indem wir die Anwendung in verschiedene Ebenen wie Datenbank (vorhanden), Geschäftslogik und Ansicht aufteilen. Auf diese Weise werden neu entwickelte Module zu bestehenden Systemen hinzugefügt und neue Seiten ersetzen alte Seiten in diesem bestimmten Modul. Gleichzeitig können wir die neuen Schichten neben dem alten System testen und sie freigeben, sobald wir uns sicher fühlen. Wir haben auch überlegt, eine API-Struktur für die Geschäftslogik zu entwickeln, auf die von view als externe Anwendung zugegriffen werden kann.

Option 2: Im Moment haben wir ein einfaches Modul erstellt und es in einer klassischen ASP-Seite über einen IFrame verwendet, obwohl das Senden von Daten zwischen klassischem ASP und neuer Seite im IFrame ziemlich mühsam war.

Dies ist gerade in der Planungsphase, wie wir das Umschreiben der gesamten Anwendung erreichen sollen, ohne die Benutzerbasis zu stören.

Ich möchte Ansichten, Meinungen und Vorschläge anderer Programmierer erhalten, wenn wir uns in einem solchen Szenario nähern sollten. Wenn jemand mit einem solchen Szenario konfrontiert ist, teilen Sie bitte auch Ihre Meinung mit.

Möchten Sie auch wissen, ob die Verwendung von ASP.net MVC mir dabei helfen wird?

UPDATE : Vielen Dank für beide Antworten, die Sie für Ihre Meinung abgegeben haben. Möchten Sie mehr Informationen zu beiden Optionen erhalten, die ich oben bei der Migration der Anwendung von klassischem asp zu asp.net oder asp.net mvc angegeben habe? Es wäre eine große Hilfe für mich, wenn Sie alle durch Ihre Ansichten, Punkte und Gedanken zur Migration etwas dazu beitragen könnten, anstatt asp.net oder asp.net mvc zu wählen.

JPReddy
quelle
3
+1 Dies ist eine sehr gute Frage JPReddy. Ich habe noch nie so lange an einem meiner Projekte gearbeitet, daher kann ich mir Ihr Problem gar nicht vorstellen.
Robert Koritnik
Mir ist klar, dass dies ein "nachträglicher" Kommentar ist, aber Sie müssen nicht unbedingt auf WebForms oder MVC all-in gehen - ein MVC-Projekt kann WebForms-Seiten hosten und umgekehrt. Ich mache dies in MVC-Apps, um Unterstützung für SSRS und das ReportViewer-Steuerelement zu erhalten ...
Tieson T.

Antworten:

9

Lassen Sie mich mit den Worten beginnen: "Ich fühle Ihren Schmerz, Brutha." Ich habe das vor drei Jahren durchgearbeitet, und ich wünschte, MVC wäre zu diesem Zeitpunkt gereift, da die von mir entwickelte WebForms-Lösung dem MVC-Modell ziemlich gut ähnelt, ohne dass die Microsoft-Bibliotheken tatsächlich für mich erstellt wurden (natürlich gab es mehrere krasse "Warum zum Teufel?" habe ich das gemacht "unterschiede).

Am Ende habe ich auch iFrames verwendet, um die inhaltlichen Unterschiede mit .Net als übergeordneter Anwendung und classic asp als Slave zu verwalten. Ich habe die Framework-Architektur in .Net entwickelt und implementiert. Die klassischen ASP-Seiten wurden dann aus unnötigen Präsentationsstücken (einschließlich und so weiter) "ausgesondert" und in iFrames geladen. Die Daten wurden dann mit einer benutzerdefinierten Verschlüsselung über die URL übertragen. Um sicherzustellen, dass die Authentifizierung nicht einfach gefälscht werden kann und der Zugriff auf die Seite durch das Knacken der Abfragezeichenfolge nicht möglich ist, haben wir in IIS auch Wildcard-Handler eingesetzt, die die Authentifizierung von .Net vor dem Parsen klassischer ASP-Seiten erzwangen.

Angesichts dessen würde ich empfehlen, sofort zu MVC zu gehen.

  1. Mit MVC erhalten Sie Zugriff auf das Routing auf global.asax-Ebene. Durch geschickte Manipulation eines Controllers können Sie Ihre Modelle auf die richtige Weise entwickeln und haben einen gemeinsamen Controller, der alle klassischen Asp-Anforderungen nach Bedarf verarbeitet.
  2. Mit MVC können Sie ganz einfach ein Testprojekt hinzufügen und einzelne Anwendungsteile basierend auf der neuen Modellstruktur umgestalten. Gleichzeitig wird eine ausreichende Testabdeckung bereitgestellt, um sicherzustellen, dass alles in Ordnung ist. Der Wert davon ist absolut unkalkulierbar, da die Abdeckung von Refactor-Codes ein großes Problem darstellt.
  3. MVC verfolgt bei der Präsentation einen skriptgesteuerteren Ansatz als WebForms. WebForms versucht, alles so zu mischen, als wäre es eine Art zustandsbehaftete Anwendung (was es nicht ist), und das kann für Leute, die an klassisches Asp gewöhnt sind, ein ziemlicher Kulturschock sein. Verstehen Sie mich nicht falsch, Ihre Entwickler werden einen Kulturschock haben, egal in welche Richtung Sie gehen, aber wenn Sie einen Teil dieses Schocks aus der Präsentationsebene herausholen können, werden Sie möglicherweise größeren Erfolg haben.

Ich mag sowohl WebForms als auch MVC (obwohl ich mit der Einführung von Razor zugeben werde, dass ich ein bisschen voreingenommen gegenüber MVC bin). Beide haben ihren Platz, und ich denke, eine Anwendung wie die von Ihnen beschriebene eignet sich ideal für eine MVC-Implementierung, insbesondere angesichts der "gestaffelten" Art, die Sie bei der Einführung überarbeiteter Anwendungsteile benötigen.

Ich denke, Sie müssen sicherstellen, dass die .Net-Anwendung immer die übergeordnete Anwendung ist, wenn es um Authentifizierung / Autorisierung / Routing usw. geht. Ein Kollege von mir implementierte seine Migration auf eine ähnliche Anwendung mit klassischem asp als übergeordnetem Element, und er hatte eine große Anzahl von Problemen, als es schließlich darum ging, alles wieder zusammenzufügen.

Joel Etherton
quelle
1
+1 für die Empfehlung von MVC. Es wäre definitiv ein viel einfacherer Übergang.
Robert Koritnik
@Robert Koritnik: Ich weiß nicht, dass ich es als viel einfacheren Übergang bezeichnen könnte. Das Thema Routing, Binden usw. wird noch viel zu lernen sein. Diesen Weg würde ich einschlagen, zumal meine WebForms-Lösung MVC ohne Routing und ein paar andere coole Spielzeuge ähnelt.
Joel Etherton
2
Das Routing ist natürlicher und verständlicher als die Implementierung des Status und die Funktionsweise in WebForms. WebForms werden zu stark abstrahiert. Asp.net WebForms wurden entwickelt, um vor allem Desktop-Entwicklern einen reibungslosen Übergang zum Schreiben von Webanwendungen zu ermöglichen. Sie waren demselben ereignisgesteuerten Modell und dem vollständigen Status der Seite ausgesetzt. Asp.net MVC wurde dagegen für Webentwickler geschrieben (Klassische ASP-Entwickler sind vollständige Webentwickler). Keine Übergänge (ok .. es gab einen ... Testbarkeit, aber es hat nicht so viel mit App-Architektur zu tun).
Robert Koritnik
1

Wenn Sie sich für ASP.NET MVC entscheiden, wird die Umstellung nicht unbedingt einfacher, und es könnte sogar schwieriger werden. Wenn Sie sich jedoch bereits für dieses großartige Unterfangen entschieden haben, nehmen Sie sich die Zeit, um zu der Plattform zu wechseln, die Ihren Plänen am besten entspricht.

Die Migration zu ASP.NET (ohne MVC) ist "einfacher", da Sie im Allgemeinen direkte Ports Ihrer vorhandenen Logik erstellen können, ohne viel umfangreiches Refactoring durchführen zu müssen, vorausgesetzt, Sie führen nicht viele exotische Aufgaben aus klassisches ASP. Die Ergebnisse sind zufriedenstellend und für die Personen, die mit der Anwendung bereits vertraut sind, relativ vertraut. Sie erzielen Vorteile in dem Sinne, dass jede Anwendung, die von klassischem ASP nach ASP.NET portiert wird, Vorteile erhält .

Die Migration zu ASP.NET MVC wird mehr Arbeit bedeuten. Wahrscheinlich muss Ihr Anwendungsmodell neu strukturiert werden, damit es in das MVC- Muster passt . Dies ist im Allgemeinen eine gute Sache (tm), weil es gute Verhaltensweisen wie die Trennung von Bedenken fördert. Die resultierende Anwendung wird mit Ausnahme der wichtigsten logischen Elemente wahrscheinlich nichts ähneln, was Sie bereits haben. Sie erhalten auch andere Vorteile . Es wird ein großer Kulturwandel sein und es wird einige (Um-) Schulungen des Entwicklungsteams erfordern, um zu verstehen, wie man MVC richtig schreibt.

Es ist zu erwähnen, dass Microsoft WebForms nach ScottGu (Stand vor einem Jahr) nicht aufgibt , aber ich denke nicht, dass es schwierig ist, die Entscheidung zu treffen, eine dieser beiden Technologien auslaufen zu lassen Webformulare.

Daniel DiPaolo
quelle
8
Ich würde der MVC-Aussage überhaupt nicht zustimmen. Ich denke, Asp.net MVC wäre ein viel besserer Transtionspfad als Webformulare. Zum Teufel, Sie könnten vorhandene Seiten verwenden, um auf Asp.net MVC-Controller-Aktionen zurückzugreifen, wenn Sie möchten. Modellbindung auch an starke Typen (automatische Serverüberprüfung). Mit WebForms wäre so etwas unvorstellbar. Die gute Sache ist , wenn sie in klassischen ASP versiert sind es viel sein VIEL einfacher zu MVC zu intensivieren als WebForms. MVC ist für das HTTP-Protokoll genauso geeignet wie der alte ASP, Webforms dagegen nicht. Überhaupt nicht.
Robert Koritnik
1

Ich stimme voll und ganz zu, dass ASP.NET MVC der richtige Weg ist. Es wird nicht einfach, es wird nicht einfacher sein, aber es ist mit Sicherheit viel zukunftssicherer als WebForms. Obwohl WebForms sicherlich nicht aufgegeben wurde, wird die Wartung von Anwendungen, die sie verwenden, immer schwieriger, je größer die Anwendungen werden.

Ich rate nachdrücklich von der Verwendung von WebForms für "große" Anwendungen ab.

Andrea Raimondi
quelle
Hey Andrea. Willkommen bei den Programmierern! Bei Stack Exchange enthält jeder Beitrag standardmäßig Ihren Namen und einige andere Informationen, sodass Sie keine Signatur hinzufügen müssen. In den FAQ finden Sie weitere Tipps und Informationen zur Verwendung.
Adam Lear
Hallo Anna, ich mache das automatisch, also ich tippe immer meinen Namen am Ende der Nachricht ein. Es wird einige Zeit dauern, sich daran zu gewöhnen.
Andrea Raimondi
1

Ich mag Option 1) (mit MVC) viel besser als Option 2), da Sie die Anwendung schrittweise weiterentwickeln können, ohne die beiden Apps zu sehr miteinander verbinden zu müssen, wie Sie es mit dem iFrames-Ansatz tun würden.

Ich habe einige Erfahrungen mit der Migration einer alten App auf ASP.Net gesammelt und eine der Herausforderungen bestand darin, einige Ressourcen wie den Sitzungsstatus zwischen den beiden Apps auszutauschen. Dies kann gelöst werden, indem eine App die andere auf der Serverseite über die Cookie-Informationen aus dem Browser des Benutzers anruft. Ein anderer Informationsaustausch zwischen Apps kann natürlich auch über URL-Routing und Abfragezeichenfolgen erfolgen, was bei MVC ein natürlicher Ansatz ist.

Das Identifizieren geeigneter Module, die zuerst migriert werden müssen, kann eine Herausforderung sein. Sie können jedoch damit beginnen, alle neuen Funktionen in MVC zu entwickeln, um zu verhindern, dass mehr Dinge in der Garage migriert werden. Wählen Sie dann möglicherweise Abschnitte aus, die einen erheblichen Rückstand an Nacharbeiten oder Fehlerkorrekturen aufweisen, da die MVC-App dann zu einer Art Refactoring wird und Sie Ihr altes System verwenden, um die erwarteten Ergebnisse wie von Ihnen vorgeschlagen zu ermitteln. Vergessen Sie nicht, auch die Testbarkeit von MVC zu nutzen, indem Sie während dieses Refactorings Komponententests und automatische Abnahmetests (z. B. SpecFlow / Watin) hinzufügen. Ein Vorteil der letzteren Art von Tests besteht darin, dass Sie überprüfen können, ob sie das alte System weitergeben, und dann dieselben Tests für diesen und zukünftige Umgestaltungen auf Ihren neuen Code anwenden können.

Schlüsselfertig
quelle