Migration von bestehenden .NET Applikationen mit WindowsForms

Werbung
Migration von bestehenden .NET Applikationen mit
WindowsForms in Misch-Windows/Web-Lösungen
Technischer Bericht
Marc Schanne
ZfS Karlsruhe
April 2006
Anforderungsszenario
Web-Applikationen sind ein weit verbreitetes Verfahren, um den Zugriff auf Unternehmensprozesse und zentrale Geschäftslogik zu vereinfachen. Da der doppelte Programmieraufwand
für das Angebot einer solchen Lösung nicht erwünscht ist und bestehende WindowsLösungen oft um den Einsatz mit Web-Technologie erweitert werden müssen, analysiert
dieses Papier Möglichkeiten, die sich durch den Einsatz der .NET-Plattform ergeben.
Grundlage der Überlegungen ist eine bestehende .NET Applikation, die eine Trennung in
Modell, Geschäftslogik und WindowsForms-GUI zur effizienten Darstellung von Ausschnitten großer Datenmengen implementiert. Diese soll um eine Web-Sicht und eine
Darstellung über Web-Browser erweitert werden. Dabei soll die existierende Geschäftslogik
ohne Portierungsaufwand adaptiert werden und von beiden Sichten (WindowsForms und
WebForms) der Applikation genutzt werden.
Dieser Bericht untersucht, in wie weit eine Umstellung der bestehenden Systemarchitektur
sinnvoll oder notwendig ist, um auch die Wartung und Erweiterbarkeit der Applikation in der
Zukunft zu vereinfachen.
Möglichkeiten
Vor der Beschreibung der
geeigneten
Systemarchitektur
werden
zuerst
mögliche
Alternativen für die Entwicklung
einer Applikationsarchitektur mit
Zielrichtung einer zeitnahen
Umsetzung bei geringem Aufwand diskutiert.
•
WebForms mit ASP.NET 2.0
Vorteile in Entwicklung und
Wiederverwendung bei .NET
2.0 durch Trennung von GUI
(erzeugt mit Visual Studio
2005 Designer, vgl. Abb. 1)
und Geschäftslogik im „code
behind“
(mit
partiellen Abbildung 1: Entwicklung einer Website mit Visual Studio 2005
Klassen)
Mit ASP.NET ist es einfach möglich, sauber und klar strukturierte Anwendungen zu
erzeugen, bei denen Dartellungsaspekte (GUI) und Geschäftslogik („code behind“)
getrennt entworfen und ausgetauscht werden können. Wie bei WindowsForms-Anwendungen, werden die Funktionen der Geschäftslogik (Web-Services, eigene Logik in DLLs,
Bibliotheken von Drittanbietern) über Events und Event-Behandler angesteuert, die in entsprechenden ASP-Tags der ASPX-Seite serverseitig definiert werden. Beim Aufruf einer
solchen Seite wird der entsprechende Programmtext zur Laufzeit kompiliert, ausgeführt
und eine an den jeweiligen Browser angepasste HTML-Seite erzeugt und versendet.
•
WindowsControl-Hack im IE
Lösung insbesondere fürs Intranet um die
Nutzung von bestehenden WindowsControls
schnell mit einer Browser-Infrastruktur zu
ermöglichen
Bei diesem Ansatz dient der Internet Explorer
als Host für WindowsControls. Ähnlich wie
ein Java-Applet kann eine DLL-Datei über
einen Object-Tag im HTML-Code referenziert
werden. Der Internet Explorer startet dann für
eine solche Datei die .NET-Laufzeitumgebung
und führt den Code der DLL aus (vgl. Abb. 2).
Daher muss im entsprechenden Object-Tag
ein voll qualifizierter Klassenname (inkl.
Namensraum) angegeben werden.
Diese
Klasse dient dann als Einstiegspunkt für die
Ausführung. Ein wichtiger Punkt bei einer
derartigen Lösung ist die Sicherheit. Das
WindowsControl wird als vollständig ver- Abbildung 2: Ein UserControl im Internet
walteter Code von der .NET-Laufzeit- Explorer
umgebung ausgeführt und unterliegt somit den
strengen Sicherheitsanforderungen der .NET-Plattform. Die entsprechende DLL muss
explizit zur Ausführung berechtigt werden.
In einem Intranet-Szenario könnte
beispielsweise ein Netzlaufwerk oder auch eine Intranet-URL als Freigabeort verwendet
werden. Die sicherste Lösung bietet allerdings die Bindung der Ausführungsberechtigung
an einen so genannten „starken Namen“ der die DLL eindeutig beschreibt.
•
ASP.NET 3.0 und AJAX
„Zukunftstechnik“ basierend auf bekannten Techniken (Asynchronem JavaScript, und
XML), die Web-Applikationen weiter in Richtung „normale“ Anwendung verändert
Mit ASP 3.0 soll der bereits eingeschlagene Weg der Trennung von Darstellung und
Geschäftslogik weiter ausgebaut werden. Durch die Möglichkeiten der asynchronen
Kommunikation zwischen Server und Webseite beim Client (AJAX) ist es mittlerweile
möglich, Komponenten für die Darstellungsschicht zu entwickeln, die denen zustandsbehafteter Anwendungen (WindowsForms) sehr nahe kommen. Beispielsweise ist es so
möglich, eine große Tabelle auf mehrere Seiten zu verteilen (paging), beim Blättern der
Seiten aber nicht jedes mal den gesamten HTML-Rahmen (mit Bildern und Text, die sich
nicht ändern) mit zu übertragen. Es werden nur XML-Daten für die Browser-seitige
Füllung des neuen Tabellenausschnitts versendet. ASP.NET in Verbindung mit AJAX
erlaubt so den WinForms-ähnlichen komponentenorientierten Entwurf einer Web-
Applikation mit Nutzung aller Bibliotheken
der .NET-Plattform.
Abbildung 3 zeigt
mögliche WebControls einer aktuell schon
verfügbaren Bibliothek. Zukünftig soll es
möglich sein, Komponenten für dynamische
TreeView- oder DataGrid-Sichten mit paging
auch für ASP.NET als WebControls
anzubieten.
Funktionalität und Aussehen
entspricht weitgehend den in der WinFormsBibliothek verfügbaren Komponenten. So
wird es auch möglich, eine Anwendung ohne
zusätzlichen Code als WinForms- und WebApplikation anzubieten.
•
Windows SDK, WinFX und XAML
Zukünftige Technik (Vista, „Longhorn“) um
basierend auf XML-Beschreibung GUI zu Abbildung 3: WebControls einer kommerziellen
beschreiben und sowohl in Windows- als auch Bibliothek mit umfangreichen AJAX-Features
Web-Applikationen gleich zu verwenden. Aktuelle CTP unterstützt noch nicht die
Konvertierung ohne Entwickler-einsatz.
Dieser Ansatz bietet eine weitere Ebene zwischen Darstellungschicht und Geschäftslogik.
Ähnlich wie bei ASP.NET 3.0 und AJAX beschrieben, können hier die Komponenten
über eine XML-basierte Beschreibungssprache definiert und konkrete Parameter spezifiziert werden.
Insbesondere die beiden zuletzt einführten Techniken zeigen auf wohin der Weg bei der
Entwicklung von Web-Applikationen mit der Integration von Geschäftslogik und Angleichung der GUI-Möglichkeiten geht. Die Benutzerfühung und -interaktion von Webseitenbasierten Applikationen werden weiterentwickelt und assimilieren das Verhalten lokaler
Applikationen. Um jedoch die zeitnahe und dennoch zukunftssichere Erweiterung bestehender Windows-Applikationen umzusetzen, führt dieser Bericht die praktische
Entwicklung einer auf ASP.NET 2.0 basierten Web-Applikation und einige grundlegende
Entwurfsmuster für diesen Applikationsentwurf ein.
Softwareentwurfsmuster in Kombination mit ASP.NET
Die durchgängige Integration von ASP.NET in die aktuelle .NET-Plattform 2.0 ermöglicht
dem Entwickler die Nutzung der gesamten .NET-Bibliothek sowie den Einsatz der unter
.NET verfügbaren objektorientierten Sprachen. Mit dem Einsatz einiger nützlicher OOEntwurfsmuster, wie Einzelstück, 3-Säulen-Architektur und MVC, lässt sich eine Applikationsarchitektur für einfache Erweiterung und Wiederverwendung der Geschäftsprozessund GUI-Logik erreichen.
Die folgenden Entwurfsmuster sind grundlegende Erzeugungs- und Architekturmuster und
basierend auf diesen und Techniken der ASP.NET-Bibliothek wird eine Softwarearchitekur
(vgl. Abb. 4) für das vorgestellte Anforderungsszenario entworfen.
•
Einzelstück (Singleton) als Manager
… zur Verwaltung von Objekten. Durch den Einsatz des Entwurfsmusters Singleton wird
garantiert, dass jeweils nur ein Objekt als Manager und als Zugangspunkt zur
Geschäftslogik erzeugt wird und von beliebigen Komponenten aus zugegriffen werden
kann. Durch die Deklaration des Konstruktors als privat und eine statische, öffentlichen
Methode, die den einzelnen Manager zurückliefert, wird ein eindeutiger Zugangspunkt
ermöglicht, der von GUI, „code behind“ und zusätzlichen Verwaltungsklassen erreichbar
ist.
•
3-Säulen/Schichten Architektur
… zur Trennung von Präsentations-, Geschäfts- und Datenhaltungslogik.
Die
Verwendung von Schichten mit klaren Schnittstellen, zur ober- bzw. unterhalb liegenden
Schicht erleichtert die Wiederverwendung der einzelnen Komponenten.
Die Geschäftsprozesslogik kann so leicht von Windows- und Web-Applikationen gemeinsam verwendet werden.
•
Model-View-Controller (MVC)
… zur logischen Trennung innerhalb einer interaktiven Benutzeroberfläche. Das Datenmodell (M) wird dem Benutzer in verschiedenen Sichten (V) dargestellt. Das Modell benachrichtigt dabei die Sichten über die Veränderungen der darzustellenden Daten. Durch
die Trennung von Verarbeitungslogik (C) können Komponenten leichter unabhängig
wiederverwendet werden.
Abbildung 4: Architekturvorschlag mit ASP.NET 2.0, MVC und Singleton
Der in der Abbildung 4 dargestellte Entwurfsvorschlag für eine ASP.NET 2.0 WebApplikation nutzt diese Muster für einen klaren Entwurf.
Die Bereiche ASP und „code behind“ stellen Klassen bzw. Webform-Elemente von ASP.NET
dar. Durch den Entwurf von Webseiten mit Masterpage-Layout wird ohne „Copy-and-Paste“
ein einheitliches, leicht anpassbares Corporate Design der Web-Applikation ermöglicht. Mit
Nutzung des in Visual Studio 2005 integrierten Designers können entsprechende GUIObjekte (ASP) und Verarbeitungslogik im „code behind“ entworfen werden. Die Verbindung
mit Klassen (Model4Control-Bereich), die das Modell im MVC-Muster darstellen, wird durch
entsprechende Assistenten der Entwicklungsumgebung erleichtert.
Für Anwendungslogik und -daten, die „Seiten“-übergreifend in verschiedenen ASP.NET
Webforms zur Verfügung stehen müssen, bietet die .NET-Bibliothek und der verwendete
Web-Server ein Session-Objekt. Dies ist eine Hash-Datenstruktur, in der unter eindeutigen
Namen beliebige Objekte gespeichert und zur Verfügung gestellt werden können.
Da nur Objekte der ASP.NET Schichten Zugriff auf dieses Web-Objekt haben, muss für die
Integration von Geschäftsprozesslogik-Objekten und für den Zugriff auf eine
Datenhaltungsschicht aus Datenbanken oder Klassen mit anderen Persistenzmechanismen
(DB/BL-Bereich) ein ähnliches Modell nachgebildet werden (Singleton/HTTP CacheBereich).
Mit dem Einsatz von HTTP-Caches können Objekte über ihren Hashkey gespeichert und
zugegriffen werden. Der HTTP-Cache bietet ein feingranulares Verwaltungsverfahren. Die
Objekte werden ohne direkte Referenz aus dem aktiven Programmcode vor der automatischen
Garbage-Collection geschützt.
Der Einsatz eines Managers, der als SingletonImplementierung, ermöglicht den Zugriff aus den anderen Klassen.
Auch für den Zugriff auf die Geschäftslogik kann sich ein Singleton-Muster eignen, um die
Geschäftslogik-Objekte nur einmal zu erzeugen und so den Speicherverbrauch kontrollieren
zu können. Die speicherplatzintensive Erzeugung von Objekten in ASP.NET kann so umgangen werden.
Entwurf
Mit dem Einsatz von Visual Studio 2005 wird der Programmierer beim gesamten Entwicklungsprozess, von Entwurf, über Implementierung bis hin zum Deployment und Testing
unterstützt. Dieser Abschnitt greift exemplarischen ein paar Entwicklungsthemen auf und
beschreibt knapp die notwendigen Schritte.
•
Masterpage für einheitliche Seitenstruktur und Corporate Design
Mit einer Masterpage kann ein Design (Rahmen) für die gesamte Website und WebApplikation definiert werden. Hier können Position und Erscheinungsbild von Logos
oder von Navigationselementen festgelegt werden. Außerdem können Bereiche definiert
werden, in denen auf den einzelnen Webseiten individueller Inhalt angezeigt wird. Die
Masterpage ist ein Server-Steuerelement, das seine Eigenschaften (Aussehen) ähnlich
einer abstrakten Klasse an Seiten, die von ihm abgeleitet sind, vererbt. Wird eine solche
Seite (*.aspx) aufgerufen, so wird serverseitig der HTML-Code des Rahmens
(Masterpage) in den HTML-Code der eigentlichen Seite eingefügt und das so erzeugte
HTML-Dokument browseroptimiert an den Client versendet. Neben dem einheitlichen
Erscheinungsbild spart dieses Konzept fehleranfälliges „Copy-and-Paste“ gleich
bleibender Inhalte.
•
Navigation und Benutzerverwaltung
Für eine ASP.NET Web-Applikation kann über eine so genannte SiteMap eine baumartige
Struktur definiert werden. Diese kann an Navigationselemente, wie eine Baum- oder
Tabellen-Navigation gebunden werden. Abhängig vom Web-Browser wird das ServerObjekt als DHTML-Inhalt dargestellt und die grafische Darstellung wird über CSSBeschreibungen in Visual Studio gesteuert. Wie bei allen Steuerelementen von
ASP.NET, wird über diese Trennung von Inhalt (SiteMap) und Design (Steuerelement zur
Navigation) ein sauberer Entwurf gewährleistet. Die geschaffene Abstraktionsebene
ermöglicht es, die Navigation von der Ordnerstruktur der Website zu trennen. Zugangsund Sicherheitsebenen sind bei ASP.NET ordnerbasiert und hierarchisch aufgebaut und
die Ebene der SiteMap erlauben eine Navigation unabhängig davon zu gestalten. Ob dies
sinnvoll ist, oder eher einen Be-nutzer verwirrt, sei dahingestellt.
•
Website- und Rollenverwaltung über Verzeichnisse
Die Rollenverwaltung von ASP.NET 2.0 dient zum Verwalten der Autorisierung für
bestimmte Bereiche der Web-Applikation. Mit einer Rollenverwaltung können Benutzer
in Gruppen eingeteilt werden, indem jedem Benutzer eine Rolle zuteilt wird (Manager,
Vertrieb, User, usw.). Nach dem Anlegen der verschiedene Rollen können Zugriffsregeln
erstellt werden. Es ist möglich, Rollen den Zugriff auf bestimmte Seiten zu verweigern,
oder bestimmte Inhalte einer einzelnen Seite vor bestimmte Rollen zu verbergen. Benutzer können mehrere Rollen gleichzeitig besitzen. Beispielsweise macht es in einem
Diskussionsforum Sinn, dass einigen Benutzern sowohl der Rolle eines Mitglieds als auch
der Rolle eines Moderators zugeordnet sind. Jede Rolle kann über unterschiedliche
Berechtigungen verfügen. Ein Benutzer, der zwei Rollen zugeordnet ist, hätte dann die
Berechtigungen beider Rollen. Für die zur Benutzerverwaltung notwendigen Funktionen
(Login, Registrierung, Anzahl angemeldeter Benutzer, usw.) gibt es fertige
Steuerelemente (UserControls), die einfach in die eigene Seite integriert werden können,
ohne dass dazu eigener Programmcode notwendig ist.
•
Datenbankzugriff
Die Verwendung der Microsoft-eignen Datenbank SQL Server 2005 (Express) ist tief in
die Entwicklungsumgebung Visual Studio 2005 (Express) und die Komponenten des
.NET Plattforms integriert. Es gibt Steuerelemente zum Anzeigen von Daten (z.B.
GridView), die einfach an Tabellen der Datenbank gebunden werden können. Die Daten
können dann webbasiert verwaltet werden. Es ist möglich, Funktionen wie das Ändern
von Daten, Paging großer Datenmengen oder Deitailansichten bestimmter Datensätze
ohne eigenen Programmcode zu realisieren. Details des Datenbankzugriffs wie SQL,
Transaktionen oder Caching von Daten werden dabei durch die Steuerelemente der .NET
Plattform verborgen.
Erfahrungen beim Einsatz von ASP.NET 2.0
Mit ASP.NET ist es möglich, schnell und einfach eine schicke und ordentlich strukturierte
Web-Applikation zu erstellen. Viele Standardaufgaben (Datenbankzugriffe, Benutzerverwaltung, einheitliches Layout) werden durch Komponenten des .NET-Plattforms zur
Verfügung gestellt und können ohne programmatischen Aufwand individuell angepasst
werden. Damit diese Vorteile auch wirklich gewinnbringend eingesetzt werden können, ist es
jedoch erforderlich, sich mit dem .NET-Plattform und seinen Möglichkeiten auseinander zu
setzen. Viele Dinge (Sicherheitsaspekte, mehrsprachige Unterstützung) sind auf eine
bestimmte Art und Weise umgesetzt und müssen so daher in das Seitenkonzept integriert
werden. Wenn aber bestimmte Erfordernisse (z.B. hierarchische Ordnerstruktur für
Zugriffsebenen, Verwendung einer unterstützten Datenbank) berücksichtigt werden,
beschränkt sich die Schwierigkeit bei der Erstellung einer Website auf die Auswahl und die
Anpassung der richtigen Komponenten.
Ein wesentlicher Vorteil der Entwicklung mit ASP.NET ist die klare Strukturierung von
Design und Geschäftslogik, die bei der Entwicklung durch die Trennung des „code behind“
und der ASPX-Seite vorgegeben ist. Änderungen und Pflege der Website sind so besonders
unkompliziert, da sowohl die darstellenden Komponenten (WebControls), als auch die
Geschäftslogik komponentenbasiert aufgebaut sind. So können die fraglichen Teile einfach
ohne viele Seiteneffekte ausgetauscht werden. Durch den Einsatz bekannter OO-Entwurfsmuster kann diese Architektur weiter unterstützt werden. So wird es möglich auf Basis des
zustandslosen Web-Protokolls (HTTP) die unter Windows gewohnte Benutzerführung
nachzubilden und die Wiederverwendung von Geschäftsprozesslogik auszubauen.
Herunterladen