Kürzlich bin ich auf ein solches Anwendungsszenario gestoßen. Ein bestimmtes Unternehmen verwendet seit vielen Jahren ein von PowerBuilder entwickeltes System. Als sich das Unternehmen entwickelte, beschloss es, das alte Informationssystem von C/S auf die beliebte B/S-Architektur umzustellen Das Problem trat auf: Einige Systeme verfügen über eine große Anzahl von Dateneingaben, präzisen Berichtsdruck und andere Funktionen, und Benutzer sind an diese Art der Bedienung sehr gewöhnt. Es besteht die Hoffnung, dass das neue System diese benutzerfreundliche Funktion beibehalten kann des ursprünglichen Systems.
Als ich diese Frage hörte, bekam ich Kopfschmerzen. Es ist zu schwierig, sie in den Browser zu verschieben und sie über Webseiten zu simulieren.
1. Warum ist es für B/S schwierig, eine gute Benutzerinteraktionserfahrung bereitzustellen?
Hier gibt es mehrere größte Probleme:
(1) Das zustandslose HTTP-Protokoll
kann Informationen direkt zwischen Windows-Formularen über den Speicher austauschen, jedoch als Basis von B/S Architekturkommunikation Das HTTP-Protokoll ist zustandslos.
Wenn der Browser als Gast und der Webserver als Hotel betrachtet wird, tritt unter der Verwaltung des HTTP-Protokolls diese Situation ein: Egal wie oft ein Gast zu Besuch ist, der Webserver betrachtet ihn als Erstbesucher. Zeitbesucher. Auf diese Weise müssen Gäste jedes Mal ihre Ausweisdokumente mitbringen, damit das Hotelpersonal „ihre Identität überprüfen“ kann.
Die Zustandslosigkeit des HTTP-Protokolls führt zur „Missachtung“ des Webservers. Dies kann zwar den Durchsatz des Webservers erhöhen, bringt jedoch Probleme bei der Entwicklung von Anwendungssystemen mit sich. Da es in Anwendungssystemen häufig viele Geschäftsverarbeitungsprozesse gibt, die von Natur aus informationsfließend sind, d Gehen die Informationen im gesamten Geschäftsprozess verloren? Daher wird der Informationsaustausch zwischen HTTP-Anfragen zu einer problematischen Angelegenheit. Dies ist das Problem der „Statusaufbewahrung“ von HTTP-Anfragen. Jedes B/S-System muss dieses Problem lösen. Microsoft hat sich einige „krumme Tricks“ ausgedacht, z. B. die vollständige Nutzung der versteckten Felder in HTML-Webseiten und die anschließende Ausführung einiger Tricks auf dem Webserver, sodass ASP.NET über eine Reihe von Technologien verfügt, um den Status zwischen den einzelnen HTTP-Anforderungen aufrechtzuerhalten: Sitzung, Cookie, ViewState, Profil, Anwendung.
Das Problem ist jedoch nicht vollständig gelöst. Beispielsweise findet im allgemeinen Dialogfeld im C/S-System, das Benutzereingabeinformationen sammelt, ein Informationsaustausch zwischen dem Hauptformular und dem Dialogfeld statt (es ist in zwei Typen unterteilt: modal und nicht modal. Das erstere Dialogfeld ist Da jede Anfrage des Browsers unabhängig ist, muss unter der B/S-Architektur ein direkter Informationsaustausch ähnlich einem modalen Dialogfenster implementiert werden weiß, was zu tun ist.
AJAX verwendet die folgende Methode, um ein modales Formular zu „vereinen“: „Kombinieren“ Sie das Hauptformular und das Dialogfeld zu einem. Das Dialogfeld ist ein div-Element in HTML, das normalerweise ausgeblendet und bei Bedarf angezeigt wird. Das AJAX Control Toolkit von Microsoft verfügt sogar über ein Steuerelement, das für diese Funktionalität entwickelt wurde. In der B/S-Entwicklung gibt es unzählige solcher Tricks.
Es ist ersichtlich, dass viele Funktionen, die in C/S einfach implementiert werden können, in B/S nur sehr schwer zu implementieren sind.
(2) Spezielle Betriebsumgebung –
die Front-End-Betriebsumgebung des Browser-B/S-Systems ist der Browser, der viele Dinge mit sich bringt, z. B. den direkten Zugriff auf Hardware (z. B. Drucker) und nicht vollständig ausführen kann Nutzung der Hardware-Ressourcen.
Die heutigen neuen Computer sind beispielsweise alle Dual-Core-Computer. Können Sie direkt mit JavaScript undHTML
ein Multithread-Programm schreiben, um diese beiden „Pentium-Kerne“ vollständig zu nutzen?
system) Oben können Sie alle vom Betriebssystem bereitgestellten Funktionen aufrufen, diese Einschränkung besteht nicht.
(3) Die peinliche Web-Client-Programmiersprache JavaScript,
ein traditionelles C/S-Programm, kann eine große Anzahl verschiedener Entwicklungssprachen verwenden, insbesondere gängige objektorientierte Sprachen wie C++, Java und C# Leistungsstark und einfach zu bedienen, verschiedene Entwicklungstools sind verfügbar und sehr ausgereift.
Im Gegenteil, JavaScript, die am häufigsten verwendete Programmiersprache im B/S-Frontend, wird von vielen Programmierern, die das „Programmieren mit JavaScript“ als lästige Pflicht betrachten, nicht nur nicht gemocht, sondern sogar „gehasst“.
Werfen wir einen Blick auf die beiden größten Mängel von JavaScript.
Erstens fehlt ein klares und einheitliches Programmiermodell.
Obwohl JavaScript Java im Namen hat und eine ähnliche Syntax verwendet, hat es nichts mit echtem Java zu tun. Leider ist sie ein hässliches Entlein. Sie möchte immer ein Schwan werden, aber sie erwartet nicht, dass andere ihre Idee nicht kaufen.
JavaScript verwendet viele Objekte, aber es ist wirklich nicht überzeugend zu sagen, dass es objektorientiert ist (die Grundeinheit der objektorientierten Programmierung ist beispielsweise eine Klasse, ähnlich wie bei gängigen objektorientierten Sprachen). Wie C# gibt es überall Funktionen, die es schwierig machen, den gesamten Code gleichzeitig in Form von Klassen zu definieren, und er ist nicht strukturiert (die Grundeinheit der strukturierten Programmierung ist eine Funktion). ), da der Browser beim Parsen von HTML-Dokumenten einen Stream verwendet. Dies führt dazu, dass ein Teil des JavaScript-Codes außerhalb der Funktion platziert und direkt beim Parsen des HTML-Dokuments ausgeführt wird, während der andere Teil des in der Funktion platzierten Codes größtenteils in einem Ereignis ausgeführt wird -getriebene Art und Weise, die zu komplexen Problemen führt, ist weitaus weniger prägnant als die einheitliche Verwendung von Funktionsaufrufen in der rein strukturierten Programmierung.
Unter diesem Gesichtspunkt weist JavaScript die Merkmale objektorientierter, strukturierter und unstrukturierter Programmiermethoden auf, ist jedoch weder Fisch noch Geflügel. Es ist schwierig, klaren Code zu schreiben Struktur und einfache Wartung Es kam zu großer Verwirrung.
Zweitens ist ein weiterer Fehler von JavaScript die Browser-Ausführungsumgebung.
Aus historischen Gründen haben verschiedene Browser und sogar verschiedene Versionen desselben Browsers mehr oder weniger unterschiedliche Programmiermodelle. Daher müssen wir Code schreiben, um den Browsertyp zu erkennen IE und habe ein weiteres Set für FireFox geschrieben. Das ist wirklich mühsam.
Die oben genannten Probleme sind fast „inhärente“ „Mängel“ des B/S-Architektursystems. Angeborene Mängel werden durch Erziehung ergänzt, und die Menschen haben sich viele Tricks ausgedacht, um diese Probleme zu lösen. AJAX ist der Stern der Hoffnung, dem jeder optimistisch gegenübersteht.
2. Stern der Hoffnung – AJAX
In den letzten Tagen habe ich mich systematisch über das AJAX-Framework von Microsoft informiert. Ich stellte fest, dass die Komplexität dieses Frameworks meine ursprüngliche Schätzung bei weitem überstieg. Die Microsoft-Ingenieure, die das AJAX-Framework entworfen haben, haben das Potenzial verschiedener Webentwicklungstechnologien eingehend untersucht, was die zuvor angesprochenen Probleme weitgehend wettmachte.
(1) Erweiterung der JavaScript-Sprache:
Microsoft hat die objektorientierten Funktionen von JavaScript durch die Bereitstellung einer gekapselten AJAX-Bibliothek erweitert, mit der Funktionen wie Vererbung, Definition von Schnittstellen, Serialisierung von Objekten, Auslösen von Ereignissen, Reflexionstypen usw. problemlos implementiert werden können ist kleiner als die Realität. Es gibt immer noch eine Lücke zwischen objektorientierten Sprachen (wie Java/C#), aber die Möglichkeit, „hässliches“ JavaScript in etwas Sichtbares zu verwandeln, gilt als außergewöhnlich.
(2) Verbessern Sie die Funktionalität des browserseitigen Codes erheblich.
Mit der Unterstützung der AJAX-Bibliothek und der erweiterten Funktionalität von JavaScript sowie mit der Unterstützung des Browsers selbst können Sie JavaScript-Skripte im Browser schreiben, um problemlos asynchrone Anforderungen an den zu stellen Server, realisiert eine teilweise Seitenaktualisierung und kann den Webdienst direkt aufrufen.
(3) Einführung der komponentenbasierten Entwicklungsmethode (CBD)
Die komponentenbasierte Entwicklung (CBD) ist seit langem die gängige Entwicklungsmethode für objektorientierte Systeme, obwohl SOA (servicebasierte Architektur) derzeit sehr hoch im Kurs steht Bis zu einem gewissen Grad wird es einige Zeit dauern.
Für JavaScript, geschweige denn für SOA, ist es sehr schwierig, CBD zu implementieren.
Um CBD zu realisieren, hat Microsoft „wesentliche Verbesserungen“ an JavaScript vorgenommen und viele Funktionen erweitert. Basierend auf der Microsoft AJAX-Bibliothek können Programmierer drei Arten wiederverwendbarer Komponenten entwickeln: None_Visual Component (unsichtbare Komponente, entspricht einem objektorientierten System). von ihnen stellen öffentliche Funktionen bereit), Verhalten (Verhalten, Erweiterung der Funktionen vorhandener Web-Steuerelemente) und Steuerung (Web-Steuerelemente mit visuellen Schnittstellenelementen).
Insbesondere die Dutzenden von im AJAX Control ToolKit bereitgestellten Steuerelementen realisieren im Wesentlichen die B/S-Simulation der meisten Funktionen der C/S-Benutzeroberfläche und sind ein Modell für die Anwendung dieses neuen Programmiermodells.
Die Verbesserungen des JavaScript-Programmiermodells durch Microsoft ermöglichen es Softwareentwicklern, endlich Web-Client-Code mithilfe von CBD-Entwicklungsmethoden zu entwickeln. Ich denke, das ist ein Fortschritt.
(4) Erweiterte serverseitige Funktionen
Um die Funktionen des browserseitigen Codes zu verbessern, muss er über die Serverseite koordiniert werden. AJAX selbst basiert auf dem Programmiermodell, bei dem sich Browser und Webserver gegenseitig unterstützen (Webserver stellt Datendienste bereit und Browser stellt XMLHttpRequest-Objekte bereit, um asynchrone Anfragen an Webserver zu senden. Wenn die Daten zurückkommen, können Programmierer Code in JavaScript schreiben dynamische Teilverarbeitung von Webseiten implementieren).
Durch die AJAX-Erweiterung hat Microsoft die Funktionalität des serverseitigen ASP.NET-Frameworks erweitert. Und externalisieren Sie häufig verwendete Funktionen in einfache Websteuerelemente, z. B. das AJAX-Kernsteuerelement ScriptManager, UpdatePanel zum Definieren aktualisierbarer Bereiche der Seite und Dutzende von AJAX Control Toolkit zum Verbessern vorhandener ASP.NET Extender-Steuerelemente (d. h. ein angehängtes Steuerelement). ein vorhandenes Steuerelement, dessen Zweck darin besteht, neue Funktionen zum vorhandenen Steuerelement zu erweitern).
Mit diesen Steuerelementen ähnelt die Entwicklung von Web-Frontend-Programmen dem Entwerfen von Formularen in VB. Jetzt ist es nicht nur möglich, eine Windows Forms-ähnliche Schnittstelle zu zeichnen, sondern auch durch die Verwendung der asynchronen Anforderungs- und Teilaktualisierungstechnologie von AJAX und in Zusammenarbeit mit dem Webserver kann die Benutzererfahrung in Windows Forms erzwungen werden.
Unabhängig davon, wie viele Menschen auf VB herabschauen, hat die durch VB ausgelöste Welle der Popularisierung der visuellen Programmierung tatsächlich weitreichende Auswirkungen gehabt. Microsofts Vorstoß zur JavaScript-Programmierung ist auch der allgemeine Trend. Um die Effizienz der Webentwicklung zu verbessern, muss dieser Schritt unternommen werden.
Es muss jedoch darauf hingewiesen werden, dass es, egal wie viel es „aufgefüllt“ wird, schließlich „von Natur aus mangelhaft“ ist und es für die B/S-Architektur immer noch sehr schwierig ist, C/S in Bezug auf die Benutzererfahrung zu übertreffen .
3. Die Zukunft: B/S oder C/S, wer ist verantwortlich?
Aufgrund der Einfachheit der Verwaltung und Bereitstellung ist die B/S-Architektur heute für viele Informationssysteme die erste Wahl Erfahrung. Zusammenfassend gibt es folgende Anforderungen:
(1) Schöne Benutzeroberfläche. B/S hat hier einen Vorteil.
(2) Bequeme Eingabe. Viele Benutzer hoffen beispielsweise, Daten ohne Verwendung einer Maus einzugeben oder Daten durch einfache Klicks automatisch einzugeben. Dies ist unter einer B/S-Architektur schwierig zu implementieren und kann dieses Problem bis zu einem gewissen Grad lösen.
(3) Blitzgeschwindigkeit. Für C/S gibt es viele Möglichkeiten, eine schnelle Reaktionsgeschwindigkeit zu erreichen, aber für B/S ist es nicht einfach. Aufgrund von Browser-Einschränkungen sind die leistungsstarken Hardware-Ressourcen des Clients nahezu ungenutzt. Darüber hinaus ist die Netzwerkgeschwindigkeit der Flaschenhals der B/S-Architektur, sofern die Bandbreite nicht schnell erhöht werden kann.
Obwohl C/S eine gute Benutzererfahrung bietet, besteht das Problem darin, dass es schwierig ist, ein verteiltes System zu entwickeln, das sich über das gesamte Internet erstreckt. Da außerdem der Client installiert werden muss, werden Systemaktualisierungen und Komponentenversionsverwaltung zu einem großen Problem Darüber hinaus müssen im Gegensatz zu B in der /S-Architektur nur serverseitige Probleme berücksichtigt werden, da mehrere Benutzer gleichzeitig auf den Server zugreifen. Der Client muss auch berücksichtigt werden, wenn es um den Multithread-Zugriff auf gemeinsam genutzte Ressourcen, die Transaktionsverarbeitung usw. geht. Auf der Serverseite ist der Durchsatz stark begrenzt. Daher wird C/S größtenteils im lokalen Netzwerk für den internen Gebrauch des Unternehmens aufgebaut.
Gegenwärtig existieren B/S und C/S grundsätzlich nebeneinander. Mit der weit verbreiteten Anwendung von B/S-Technologien wie AJAX gewinnt B/S weiterhin die Oberhand, aber es ist unmöglich, C/S vollständig zu besiegen. .
Interessanter ist: Wie sieht ein großes Unternehmen wie Microsoft die Entwicklungsaussichten von B/S und C/S?
Normale Entwickler wie ich haben nicht die Möglichkeit, direkt mit Microsoft-Führungskräften zu sprechen, aber wir können es bei den Unternehmen sehen Hier einige Hinweise:
Microsoft scheint nicht zu glauben, dass B/S die zukünftige Richtung der technologischen Entwicklung darstellt. Im Gegenteil, viele seiner Maßnahmen gehen in die Richtung, Browser aufzugeben.
Erstens hat Microsoft die Entwicklung und Bereitstellung von C/S vereinfacht und die Smart Client-Technologie eingeführt, sodass die Aktualisierung von C/S-Clientprogrammen automatisch und ohne manuelle Eingriffe durchgeführt werden kann.
Zweitens hat Microsoft hart daran gearbeitet, die Lücke zwischen B/S und C/S zu schließen, indem es ASP, das gute Ergebnisse erzielt hatte, entschieden aufgegeben und direkt eine ähnliche Programmiermethode mit „visueller Steuerung + Ereignissteuerung“ eingeführt hat Sogar Webseiten werden „Forms“ – Web Forms – genannt.
Drittens könnte Microsoft AJAX als Übergangstechnologie betrachten.
Microsoft reagierte nur langsam auf AJAX, bis es aufgrund der erfolgreichen Anwendung der AJAX-Technologie durch Google und andere Unternehmen zur Verbesserung des Web-Benutzererlebnisses erkannte, dass es AJAX-Erweiterungen zu ASP.NET hinzufügte Der gesamte Prozess war offensichtlich nicht aggressiv und es wurden nicht viele Ressourcen investiert. Dies war völlig anders als zu dem Zeitpunkt, als Microsoft und Netscape einen Browserkrieg begannen. Die Tatsache, dass die AJAX-Erweiterung als Standardkonfiguration in VS2008 integriert ist und die JavaScript-Debugging-Funktion direkt in die IDE integriert ist, zeigt jedoch, dass Microsoft sich immer noch der Realität stellt und erkennt, dass AJAX eine wichtige Position und großes Entwicklungspotenzial hat.
Tatsächlich analysiere ich, dass Microsofts Ziel darin besteht, „die Welt zu vereinen“, den Browser aufzugeben und B/S und C/S vollständig zu vereinheitlichen.
Dies ist in .NET 3.0/3.5 deutlich zu sehen.
Zunächst nutzte Microsoft WCF, um DCOM, .NET Remoting und andere hauptsächlich für C/S verwendete Technologien zu vereinheitlichen und viele Unternehmensentwicklungsfunktionen, die ursprünglich in COM+ angesiedelt waren, zusammen mit der Webservice-Technologie, die hauptsächlich für die B/S-Architektur verwendet wurde, in ein einheitliches Abstract zu integrieren und in einen wiederverwendbaren WCF-Dienst kapseln. Es ist offensichtlich, dass Microsoft das Informationssystem-Entwicklungsmodell von CBD auf SOA ändern möchte (das heißt, zukünftige Systeme werden Dienste anstelle von Komponenten zusammenstellen).
Zweitens hat Microsoft das sehr ausgereifte Programmiermodell für Windows-Desktopprogramme (Win32-API + Nachrichten-/Ereignistreiber) aufgegeben und ein neues WPF-Programmierframework eingeführt. Eine der wichtigsten Neuerungen ist das Aufkommen von XAML (Application Markup Language), das der XML-Spezifikation entspricht . . XAML verwendet Nur-Text-Dateien im XML-Format zur Beschreibung von Anwendungsschnittstellen.
Wir können XAML leicht mit XHTML vergleichen. Der Browser analysiert XHTML-Code und generiert eine visuelle Weboberfläche, während XAML von der virtuellen Maschine .NET Framework analysiert wird. Da Vista .NET Framework 3.0 direkt integriert, kann Vista als Superbrowser angesehen werden XAML zur Generierung der Benutzeroberfläche und Implementierung aller Anwendungsfunktionen.
Als Ergebnis entstand ein neues Programmiermodell, egal ob es sich um ein B/S- oder C/S-System handelt: XAML-Code lesen, analysieren, präsentieren, Benutzereingaben empfangen, Daten verarbeiten und das Ergebnis anzeigen.
In diesem Programmiermodell wird der Browser zum Unbeteiligten und ist nicht mehr der Kern der Clientanwendung.
Das neue Programmiermodell läuft auf einem Betriebssystem mit vollem Funktionsumfang und nicht auf einem Browser mit eingeschränkter Funktionalität. Der Unterschied ist riesig. Wie können die Funktionen eines Browsers, der auf dem Betriebssystem läuft, mit dem Betriebssystem selbst verglichen werden
? Funktionen, um die Hardwareressourcen des Clients voll auszunutzen (Sie können beispielsweise problemlos Multithread-Programme auf der Basis von .NET Framework entwickeln, um die Arbeitsfähigkeiten der Dual-Core-CPU „auszuschöpfen“). Benutzeroberflächen werden alle mithilfe von XAML beschrieben, das die Schnittstellenschichttechnologien von B/S und C/S vereinheitlicht.
Die am besten geeignete Ausführungsumgebung für WPF ist das Betriebssystem Vista. Ein Teil seiner Funktionen, jetzt Silverlight genannt, ist als Browser-Plug-in implementiert, sodass WPF-Programme in herkömmlichen Browsern ausgeführt werden können. Da sowohl Silverlight als auch Vista XAML selbst analysieren können, können Sie XAML jetzt verwenden, um nur einen Satz Schnittstellencode zu schreiben, der sowohl für B/S als auch für C/S anwendbar ist und das gleiche Benutzererlebnis bietet.
Aufgrund einiger inhärenter Mängel von B/S und AJAX handelt es sich beim Vergleich des durch AJAX verbesserten B/S-Systems mit einem Tänzer tatsächlich um einen Tänzer, der mit Fesseln tanzt, und die Idee von Microsoft ist, Anstatt ständig zu versuchen, das Gewicht zu reduzieren Warum nicht einfach diese Fessel aufgeben?
Microsofts Einführung von WPF und WCF ist ein solcher Versuch.
Es sollte gesagt werden, dass die Entwicklungsstrategie von Microsoft auf der Analyse der Vor- und Nachteile der bestehenden B/S und C/S basiert. Sie hat ihren wissenschaftlichen Charakter und berücksichtigt auch ihre eigenen Geschäftsinteressen. Allerdings gibt es noch viele Schwierigkeiten bei der Umsetzung dieser Strategie, denn selbst so mächtig wie Microsoft, kann es die Welt nicht beherrschen. Die Gegner von Microsoft sind genauso schlau wie Microsoft und ihre Technologie schreitet genauso schnell voran.
Daraus lässt sich schließen, dass B/S und C/S aufgrund der Kontinuität der Informationssystemanwendungen über einen langen Zeitraum (vielleicht drei bis fünf Jahre, vielleicht fünf bis zehn Jahre) gleichzeitig existieren werden Viele B/S Hervorragende hervorragende Eigenschaften werden sich im Wettbewerb mit C/S durchsetzen, und diese Situation wird sich nicht wesentlich ändern. Was AJAX betrifft, so ist es zwar eine sehr effektive Waffe im B/S-System, aber ich bin hinsichtlich seiner zukünftigen Entwicklung vorsichtig optimistisch. Als Webentwickler sollten Sie diese Technologie jedoch verstehen und anwenden.
Wie die zukünftige Landschaft aussehen wird und ob eine bestimmte Technologie eine Zukunft hat, wird nicht von Einzelpersonen entschieden. Ich denke, dass das endgültige Muster des Kampfes zwischen B/S und C/S das Ergebnis des gemeinsamen Spiels mehrerer Faktoren sein wird. Der Einzelne muss mit der Zeit gehen und seine Handlungen und Strategien rechtzeitig anpassen. Dies ist das Schicksal zeitgenössischer Softwareentwickler.