| |
Ich weiß nicht, ob es besser wird,
wenn es anders wird. Aber es muß anders werden, wenn es besser werden
soll.
GEORG CHRISTOPH LICHTENBERG, PHYSIKER UND SCHRIFTSTELLER
1.7.1742 bis 24.2.1799
Visual Basic hat einen erfolgreichen Werdegang hinter sich. In zehn
Jahren schaffte es das Entwicklungswerkzeug zum Marktführer beim Rapid
Application Development (RAD): Etwa 50 Prozent der professionellen
Programmierer weltweit arbeiten mit Visual Basic. Das sind über drei
Millionen. Jetzt steht mit Visual Basic .NET die nächste Generation
bereit, und die ist weit mehr als "Visual Basic 6 + 1".
Dieser Artikel soll einen Überblick geben, was Sie erwartet, wenn
Sie bestehende Applikationen in die .NET-Welt migrieren wollen. Zusätzlich
zeigt er, welche Informationsquellen dafür zur Verfügung stehen.
Die Veränderungen von Visual Basic .NET gegenüber
dem Vorgänger sind grundlegend. Die Sprache Basic wurde aufgeräumt
und um moderne, objektorientierte Sprachkonstrukte ergänzt. Die wirkliche
Revolution aber steckt in der Klassenbibliothek, der Base Class Library
(BCL) des.NET Framework. Zwei neue Bibliotheken stehen beispielsweise
innerhalb des Frameworks allein für die Entwicklung des Benutzerinterfaces
zur Verfügung: Windows Forms für klassische Windows-basierte Oberflächen
und Web Forms für die Entwicklung von Webseiten (Visual Basic für
das Web).
Eine umfangreiche, gemeinsam mit anderen Sprachen nutzbare Klassenbibliothek
auf Basis eines einheitlichen Typsystems (Common Type System) bedeutet
aber auch das Ende der so genannten "glass ceiling": der „unsichtbaren
Mauer“ von ärgerlichen Limitationen, gegen die man in den bisherigen
Visual-Basic-Versionen öfter prallte: Bestimmte Aufgaben, wie beispielsweise
das Entwickeln von Systemservices oder das Arbeiten mit Threads konnten
in Basic nicht umgesetzt werden. Das Ausweichen auf DLLs, die in C++
geschrieben wurden, war oftmals die einzige Möglichkeit, diese Hürde
zu überschreiten. Auch die Interoperabilität mit anderen Sprachen
war bisher problematisch. All diese Beschränkungen gehören nun der
Vergangenheit an.
Gleichzeitig bietet das .NET Framework eine immense Fülle von Funktionalität
an. VB .NET nutzt jetzt eine Bibliothek, die fast alle Aspekte der
Softwareentwicklung abdeckt, dem Programmierer Routinearbeit abnimmt
und ihn so wesentlich produktiver macht.
Eine kompakte Einführung in Visual Basic .NET finden Sie unter:
Introduction to Building Applications
with Visual Basic .NET
Für die Neuentwicklung von Applikationen sind dies sehr gute Neuigkeiten.
Herr Lichtenberg (siehe Eingangszitat) wäre beruhigt gewesen: Es wird
anders, und es wird viel besser!
So weit, so gut! Aber nur die wenigsten Applikationen werden "von
Null" komplett neu entwickelt. Viele haben eine fast so lange und
erfolgreiche Geschichte wie Visual Basic selbst. Bei der Migration
von bestehenden Anwendungen stellt sich deshalb die Frage: "Wie hältst
Du’s mit der Kompatibilität, Visual Basic .NET?".
Hier ist die ungeschminkte Wahrheit: Visual Basic .NET ist nicht 100%
kompatibel zu den vorherigen Versionen.
Bei der Entwicklung von Visual Basic .NET hatte das Microsoft-Projektteam
eine gewichtige Entscheidung zu treffen: Sollte die Kompatibilität
zu altem Programmcode weitgehend beibehalten werden? Dies war lange
Zeit der Plan.
Doch bei der Entwicklung stellten sich unangenehme Konsequenzen heraus:
Die bestehende "Ruby"-Formularbibliothek aus VB 6 konnte nicht vollständig
integriert werden, und die neue Version von Visual Basic hätte nicht
alle Vorteile der .NET-Plattform nutzen können. Zu verschieden sind
die beiden Welten des COM-basierten Visual Basic 6 und der .NET-Sprache
Visual Basic .NET. Der Spagat wäre nicht geglückt. Das Entwicklerteam
entschied sich deshalb dafür, die Kompatibilität in einigen Bereichen
zu brechen.
Der Plan war nun, ein durch und durch modernes Basic zu schaffen,
das alle Möglichkeiten der .NET-Welt nutzen kann. Gleichzeitig war
klar, dass die Programmierer sehr gute Tools und detaillierte Informationen
erhalten sollten, um die Migration von bestehenden Applikationen in
die neue Welt erfolgreich bewältigen zu können.
Dies scheint ein vehementer Einschnitt zu sein. Aber keine Angst:
Sie haben Zeit. Ein Upgrade Ihrer bestehenden Applikation ist nicht
zwingend erforderlich. Sie können entscheiden: Wollen Sie Ihren Programmcode,
beziehungsweise Teile davon, weiter in VB 6 entwickeln? Kein Problem:
Microsoft hat zugesichert, die Version 6 weiterhin für lange Zeit
zu unterstützen.
Bei Bedarf können Sie VB-6-Komponenten aus beliebigen .NET-Sprachen
aufrufen und umgekehrt .NET-Code aus VB 6 ansprechen. So übertragen
Sie erst Teilbereiche Ihrer Applikation in VB .NET oder eine der anderen
.NET-Sprachen. Erst nach und nach portieren Sie die verbliebenen Teile
in Richtung .NET.
Entscheiden Sie sich für ein Upgrade Ihres bestehenden Codes nach
.NET, steht Ihnen im Upgrade Wizard ein leistungsfähiges Tool zur
Verfügung. Die Dokumentation über den Upgradeprozess ist vollständig
und von sehr guter Qualität. Zahlreiche Whitepapers, "How To"-Anleitungen
und audiovisuelle Präsentationen stehen bereit.
Welche Entscheidung Sie treffen, hängt in großem Maße von Ihrer bestehenden
Codebasis ab. Wollen Sie ein bestimmtes Projekt nur noch warten, planen
jedoch keine Weiterentwicklung? Hier wäre unter Umständen eine Migration
nicht angeraten. Soll die Applikation von neuen .NET-Features profitieren,
aber Sie können nicht den gesamten Code sofort migrieren? Kein Problem,
nutzen Sie .NET-Komponenten, um beispielsweise eine Webanbindung Ihrer
Applikation zu realisieren – wenn Sie bisher Ihre Applikation komponentenbasiert
aufgebaut haben, können die neuen .NET-Komponenten und die bestehenden
VB-6-Komponenten problemlos zusammenarbeiten.
Die Entwicklungsumgebungen von VB 6 und VB .NET üben sich konsequenterweise
in friedlicher Koexistenz: Das alte und das neue Basic können problemlos
und ohne Nebenwirkungen auf demselben Entwicklungsrechner installiert
werden. Dies wird sogar ausdrücklich empfohlen; nur so sind Sie in
der Lage, Ihre bestehende Applikation weiter unter VB 6 zu bearbeiten,
neue Komponenten in VB .NET zu entwickeln und Tools wie den Update
Wizard effektiv zu nutzen.
- Überlegen Sie sich, welche Aspekte Ihrer Applikation
durch die .NET-Technologie "added value" gewinnen. Die oben erwähnte
Webintegration ist ein gutes Beispiel: .NET bietet mit den Web
Forms eine leistungsfähige Möglichkeit, schnell und einfach Web-Frontends
für bestehende Applikationen zu entwickeln.
- Lernen Sie VB .NET und das .NET Framework
kennen. Es gibt viel Neues, aber durch den logischen Aufbau des
Frameworks lernen Sie den Umgang schnell. Außerdem macht es Spaß!
- Machen Sie einen Upgrade-Plan, in welchem
Sie Ihr Vorgehen bei der Migration festlegen: Was wird wann migriert?
Welche Vorbereitungen müssen getroffen werden?
Migration und Einarbeitung in die neue Welt von
.NET erfordern Investitionen in Zeit und Ausbildung. Sie werden aber
sehr schnell feststellen: Es lohnt sich. Ein kurzer und deshalb unvollständiger
Rundgang durch VB .NET soll zeigen, wo die Vorteile liegen.
Es fängt mit der integrierten Entwicklungsumgebung von Visual Studio
an: Die Tasklist bietet schnellen Zugriff auf zu erledigenden Aufgaben,
fehlerhafte und unfertige Codestellen. Die Kontexthilfe zeigt "online"
Informationen zu den Befehlen, die Sie momentan im Code bearbeiten.
Der Server Explorer integriert viele Funktionen, für die Sie bisher
externe Tools verwenden mussten. Beispielsweise können Sie unter anderem
SQL-Server-Datenbanken warten, Tabellen anlegen und Stored Procedures
schreiben.
Visual Basic .NET bietet nun volle Objektorientierung. Dies umfasst
Codevererbung, strukturierte Fehlerbehandlung mit Try-Catch-Blöcken
und vieles mehr. Visual Basic .NET bietet damit alle Sprachfeatures,
die Sie von einer modernen Programmiersprache erwarten können.
Für die Entwicklung von klassischen Windows-Oberflächen bieten sich
Ihnen dank der schon erwähnten Windows Forms neue Möglichkeiten. Dank
visueller Vererbung können Sie von bestehenden Benutzerdialogen erben,
diese anpassen und so vorhandene visuelle Komponenten wiederverwenden.
Anchoring und Docking sorgen für die korrekte Platzierung von Oberflächenelementen,
wenn sich die Größe des Dialogs ändert. Die Windows Forms Controls
bieten komfortable Datenbindung an eine Vielzahl von Datenquellen.
Integrierte Funktionen zur Lokalisation sorgen dafür, dass es extrem
einfach wird, Programme für einen globalen Markt zu entwickeln.
Schließlich bietet das .NET Framework eine erhebliche Vereinfachung
von Setup und Deployment. Im Normalfall können Sie Ihre Applikation
einfach auf die Zielmaschine kopieren, wenn dort die.NET-Runtime installiert
ist ("XCopy-Deployment"). Der Projekttyp "Setup Project" innerhalb
von Visual Studio erlaubt zudem das einfache und flexible Erzeugen
von Windows Installer (MSI)-Paketen für Ihre Anwendung.
Wie können Sie nun den Umstieg auf VB .NET konkret
angehen, wenn Sie eine bestehende VB-6-Codebasis haben? Das Visual
Basic Upgrade Lab der Microsoft Corporation hat dazu drei grundsätzliche
Strategien entwickelt:
- Komplette Neuimplementierung in .NET
Hier handelt es sich um eine sehr kompromisslose Vorgehensweise:
Sie entwickeln Ihre Applikation komplett neu, ohne den bestehenden
Code mit einzubeziehen.
- Komplette Portierung der bestehenden Codebasis
Mit Hilfe von Migrationstools und manuellen Anpassungen migrieren
Sie Ihre bestehende Codebasis halbautomatisch auf .NET. Dabei
lassen Sie Ihre bestehende Applikationsarchitektur in großen Teilen
intakt.
- Mischlösung
Sie implementieren bestimmte Funktionalitäten in neuen Komponenten
mit VB .NET oder einer anderen .NET-Sprache. Aus dem bestehenden
VB-6-Code erzeugen Sie, soweit noch nicht geschehen, COM-Komponenten.
Über die COM Interop Technologie können die bestehenden VB-Komponenten
mit den neuen .NET-Komponenten interagieren.
Wo liegen die Vor- und Nachteile der einzelnen Vorgehensweisen?
Entscheiden Sie sich für eine komplette Neuimplementierung, können
Sie die Vorteile der .NET-Plattform ohne Einschränkungen nutzen und
erreichen damit optimale Skalierbarkeit und Performance. Setup und
Deployment werden sehr einfach. Kurz: Sie genießen .NET ohne Kompromisse.
Leider ist diese Kompromisslosigkeit aus wirtschaftlichen und logistischen
Gründen oft nicht möglich, weil sie einen erheblichen Arbeits- und
Schulungsaufwand innerhalb eines kurzen Zeitraums mit sich bringt.
Portieren Sie jedoch Ihren bestehenden Code mit Hilfe eines Migrationstools,
reduziert sich der Arbeitsaufwand in den meisten Fällen bedeutend.
Sie können bei Bedarf Teile Ihrer Applikation umschreiben und selektiv
von den erweiterten Möglichkeiten des .NET Frameworks Gebrauch machen.
Ein Beispiel: Wenn Ihr Programm sehr viele Strings verarbeitet, können
Sie durch Einsatz der .NET-Klasse StringBuilder Performancegewinne
bis zu einem Faktor 30 erreichen. Abhängig von Ihrem bestehenden Sourcecode
kann die Codemigration jedoch mehr oder weniger aufwändig sein. Im
besten Fall müssen Sie nach einer automatischen Migration nur wenige
Anpassungen vornehmen, im schlechtesten Fall ist der Arbeitsaufwand
beträchtlich.
In den meisten Fällen wird der goldene Mittelweg zum Erfolg führen.
Bereiten Sie Ihre bestehende Applikation optimal vor, indem Sie deren
Funktionalität in COM-Komponenten aufteilen. Stellen Sie dann fest,
welche Komponenten am meisten von .NET profitieren können und konvertieren
Sie diese mit Hilfe des Migrationstools. Lassen Sie die schwierig
zu portierenden Komponenten unangetastet und pflegen Sie diese weiterhin
in VB 6.
Die Kommunikation zwischen COM- und .NET-Komponenten ist problemlos
und völlig transparent, leider aber kostet sie mehr Zeit als zwischen
Komponenten der gleichen Welt. In den meisten Fällen spielt dies aber
für die Gesamtperformance der Anwendung eine untergeordnete Rolle.
So müssen Sie zwar auf einige Nice-to-have-Features einer reinrassigen
.NET-Applikation, wie etwa das sehr einfache Deployment, verzichten,
minimieren aber den Aufwand und die Kosten.
Eine detaillierte Diskussion der einzelnen Möglichkeiten finden Sie
unter:
A Framework for Upgrading Your Enterprise
Application to .NET
Visual Basic bietet Ihnen ein leistungsfähiges Tool
zur Codemigration – den Upgrade Wizard. Er tritt in Aktion, wenn Sie
aus Visual Basic .NET ein bestehendes VB-6-Projekt öffnen. Der Wizard
legt ein neues VB-.NET-Projekt an und konvertiert den VB-6- Sourcecode
in .NET-Code. Ihr VB-6-Projekt bleibt dabei unangetastet.
Das Resultat sind das übersetzte Projekt und ein Upgrade-Report, der
den Verlauf der Konvertierung in übersichtlicher Form darstellt. Der
Wizard gibt Ihnen in diesem Report wertvolle Informationen in Form
von ToDo-Kommentaren.
Dabei gibt es verschiedene Klassen von Kommentaren:
- Errors sind Codestellen, die der Wizard nicht
automatisch übersetzen konnte und die in VB .NET zu einem Compilerfehler
führen. Hier müssen Sie von Hand eingreifen.
- Mit Warnings weist der Wizard Sie auf Stellen
im Code hin, bei denen VB .NET für die entsprechenden Befehle
eine geänderte Semantik besitzt: Abhängig davon, wie Ihr Programm
den jeweiligen Befehl einsetzt, sollten Sie im Einzelfall überprüfen,
ob Sie eventuell Änderungen vornehmen müssen.
- ToDo-Kommentare schließlich weisen auf Codefragmente
hin, die der Wizard teilweise übersetzen konnte, bei denen aber
noch manuelle Anpassungen nötig sind.
Die im Upgrade-Report aufgelisteten Kommentare fügt
der Wizard zusätzlich noch direkt an den betreffenden Stellen in den
Sourcecode ein. Diese Kommentare enthalten ebenfalls Hyperlinks in
die Hilfe, wo Sie detaillierte Information zum jeweiligen Kommentar
finden. Weiterhin füllt der Wizard die Kommentare auch in die Tasklist
der Visual-Studio-IDE. Sie können durch Klicken auf diese Upgrade
Tasks zu den betreffenden Codestellen gelangen und so nacheinander
alle Kommentare abarbeiten.
Eine Einführung in die Benutzung des Upgrade Wizard finden Sie hier:
Introduction to Upgrading Visual Basic
6.0 Applications to Visual Basic .NET
Der Upgrade Wizard kann nicht zaubern, auch wenn der Name dies nahelegt.
Er ist jedoch ein wertvolles Tool, um Ihnen lästige Routinearbeit
abzunehmen. Bewährt hat sich in diesem Zusammenhang ein Two-Pass Upgrade:
Ein erster Durchlauf durch den Wizard dient einzig und allein dazu,
potentielle Probleme zu identifizieren. Der Code des VB-6-Quellprojekts
kann dann mit den so gewonnenen Informationen manuell angepasst werden,
bevor der Wizard in einem zweiten Durchlauf das Projekt tatsächlich
übersetzt. Schließlich bereinigen Sie in VB .NET die verbleibenden
Upgrade-Kommentare.
Welche Änderungen nimmt der Upgrade Wizard am Code vor? Bei einem
großen Teil Ihres VB-6-Codes lautet die Antwort: Keine. Denn VB ist
immer noch VB und an vielen Stellen ist schlicht keine Änderung nötig.
Sprachunterschiede wie beispielsweise die geänderte Syntax von Get/Set-Methoden
für Objekteigenschaften werden vom Wizard problemlos in die neue Sprachsyntax
konvertiert.
Bestimmte Klassen und Sprachelemente, wie beispielsweise Strings fester
Länge, existieren in VB .NET nicht mehr. Hier greift der Wizard auf
Kompatibilitätsklassen zurück. Er benutzt dabei eine Bibliothek von
Visual Basic .NET, welche im .NET Framework nicht mehr vorhandene
VB-Funktionen unter .NET implementiert. Der erwähnte String fester
Länge wird beispielsweise durch die .NET-Klasse VB6FixedLengthString
ersetzt.
Bestehende VB-6-Forms übersetzt der Wizard in Windows-Forms-Klassen.
Eingebettete ActiveX-Controls bleiben unverändert. Dies gilt ebenfalls
für UserControls. VB-6-eigene Controls, beispielsweise das DriveListbox-Control,
werden durch in .NET-Kompatibilitätsklassen ersetzt.
ADO-Datenbindung (ActiveX Data Object) per Data-Control ersetzt der
Wizard durch ein spezielles .NET-kompatibles ADO Data-Control. DAO-
oder RDO-Datenbindung (Data Access Objects, Remote Data Objects) an
Windows-Forms-Controls wird leider nicht mehr unterstützt – der Zugriff
über konventionelle COM-Objekte ist für diese Datenzugriffstechnologien
jedoch nach wie vor möglich.
Durch Anpassungen Ihres VB-6-Codes können Sie erreichen, dass der
Upgradeprozess wesentlich erleichtert wird. Hier sind einige Tipps,
die unabhängig von der Migrationsthematik in vielen "Best Practice"-Sammlungen
für VB zu finden sind:
- Verwenden Sie Early Binding für Ihre Objektreferenzen.
Der Wizard erhält so bedeutend mehr Informationen über die Objekte,
die er übersetzen soll und kann beispielsweise Default-Eigenschaften
besser auflösen.
- Vermeiden Sie Variant-Variablen und ersetzen
Sie diese durch typisierte Variablen.
- Vermeiden Sie das Speichern von Datumswerten
in Double-Variablen. Verwenden Sie stattdessen den Datentyp Date.
- Verwenden Sie null-basierte Arrays, nur diese
werden vom .NET Framework unterstützt.
- Verwenden Sie vordefinierte Konstanten. Besser
als Form1.WindowStyle=2 ist Form1.WindowsStyle=vbMaximized. Sie
geben dem Wizard wertvolle Hinweise zur Konvertierung und erhöhen
gleichzeitig die Lesbarkeit Ihres Codes.
- Vermeiden Sie überholte Syntax: Def,
On x Goto .., GoSub…Return, StrPtr, VarPtr, ObjPtr und Option
Base 0|1 wurden ersatzlos gestrichen und dürfen sich in den verdienten
Ruhestand für altgediente Befehle begeben.
Mehr Tips zur Vorbereitung Ihres VB 6-Codes erhalten
Sie unter:
Preparing Your Visual Basic 6.0 Applications
for the Upgrade to Visual Basic .NET
Manche Technologien aus dem VB-6-Umfeld gib es unter .NET nicht mehr.
Für alle diese Technologien existieren inzwischen bessere Alternativen.
Hier einige Beispiele:
- AddIns für die VB-Entwicklungsumgebung: Hier
existiert ein neues Objektmodell für die Visual-Studio-.NET-IDE.
Der Nachteil: Sie müssen Ihr bestehendes AddIn neu schreiben.
Der große Vorteil: Das neue AddIn funktioniert dann für alle .NET-Sprachen,
die sich in Visual Studio .NET integrieren. Als Alternative können
Sie in Visual Studio .NET Makros programmieren und so Abläufe
innerhalb der Entwicklungsumgebung automatisieren.
- LSet-Methode – Implementieren Sie eine eigene
Methode, um benutzerdefinierte Typen zu kopieren.
- DAO- und RDO-Datenbindung: Sie können die
RDO- und DAO-Objekte weiter verwenden; wie oben bereits erwähnt,
funktioniert die Datenbindung an Windows Forms-Controls für diese
Technologien nicht mehr. Versuchen Sie soweit möglich ADO-Datenbindung
zu verwenden.
- OLE Control: Ersetzen Sie dieses Control durch
das WebBrowser-Control (ActiveX!), welches ebenfalls OLE-Objekte
einbetten kann.
- GoSub/Return: Verwenden Sie stattdessen Prozeduraufrufe.
- ActiveX-Dokumente und DHTML-Seiten – belassen
Sie diese in VB 6.
Visual Basic .NET bringt viel Neues für den Entwickler.
Um mit den Worten der Serie "Raumschiff Enterprise" zu sprechen, entführt
Visual Basic .NET in Welten, die noch nie ein Basic zuvor gesehen
hat. Beispielsweise sind nun endlich Multithread-Applikationen und
Windows Services möglich.
Der Artikel zeigt aber auch, dass vorhandene Programme nicht verloren
sind. Vielmehr haben Sie die Wahl, wie Sie die Projekte umsetzen:
ob in einem Rutsch komplett, in Schritten oder nur teilweise. Alles
ist möglich. Und Sie erhalten bestmögliche Unterstützung. So hilft
der Upgrade Wizard in Visual Basic .NET bei der Übersetzung des Codes
und weist auf Fehler oder Probleme hin. Visual Basic .NET wird einigen
Lernaufwand kosten, aber dann werden Sie wie Commander Spock sicher
auch sagen: „Faszinierend!“.
Der Visual Basic .NET Upgrade Guide bietet eine unverzichtbare Informationsquelle
mit einer Fülle von Whitepapers, audiovisuellen Präsentationen und
Democode zu allen Aspekten der Visual Basic Migration:
The Visual Basic .NET Upgrade Guide
Online:
Bücher:
- Ed Robinson, Michael Bond, Ian Oliver:
"Upgrading Microsoft Visual Basic 6.0 to Microsoft Visual Basic
.NET"
Microsoft Press; ISBN 073561587X (Englische Version)
"Von Microsoft Visual Basic 6.0 nach Microsoft Visual Basic.NET"
Microsoft Press; ISBN 3860636669 (Deutsche Version)
- Dan Appleman: "Moving to VB .NET"
Apress; ISBN: 1893115976
- Ralph Westphal: ".NET kompakt"
Spektrum; ISBN 3827411858
"Die Inhalte der hier eingestellten Artikel
stammen möglicherweise nicht von Futureware, sondern von Dritten
und werden Ihnen kostenlos zur Verfügung gestellt. Futureare kann
daher für die Richtigkeit und Vollständigkeit der Inhalte keine
Haftung übernehmen.“
Quelle: MS Monatsspiegel 04/2004
|
|