You are on page 1of 82

Migracin a

Visual Basic .NET


Rodrigo Bruno
Application Development Consultant
Soporte Premier a Desarrolladores

Objetivos

Explicar porqu un desarrollador de VB6


debera pasar a VB.NET
Ayudar/facilitar la transicin de VB6 a
VB.NET

Agenda

Referencias: Guas de arquitectura, diseo y


cdigo
Arquitectura del .NET Framework y la CLR
Estrategias de migracin
VB6 vs VB.NET: Diferencias en el lenguaje
Acceso a datos: ADO.NET
Asistente de Actualizacin de Aplicaciones
Interoperabilidad con COM
Implantacin de aplicaciones (no touch)
Seguridad en el .NET Framework

1.- Guas de arquitectura /


diseo y cdigo

Guas de Arquitectura (PAG)


Estndares de desarrollo
Application Blocks
Guas de migracin

Guas de arquitectura

Guas de diseo para aplicaciones .NET

Blueprint para decisiones a nivel de diseo

Alto riesgo en la etapa de diseo


Arquitectos son contrarios al riesgo

No es una solucin para todos los diseos

Muestran como encaja todo junto

Hay escenarios especficos

Preservar las inversiones

Tendr que rehacer todo en el futuro?

Guas de Arquitectura
Security

Operational Management

Communication

Users and Devices

Presentation
UI Components
UI Process Components

Business
Business
Workflows

Svc
Svc Interfaces
Interfaces

Business Components
Business Entities

Data
Data Access
Components
Data Sources

Svc
Svc Agents
Agents

Services

Guas de Arquitectura

Application Architecture for .NET: Designing Applications and Services


.NET Data Access Architecture Guide
Building Secure ASP.NET Applications
Debugging .NET Applications
Exception Management in .NET
.NET/COM Migration and Interoperability
Monitoring in .NET
Deploying .NET Applications
Team Development with SourceSafe
UNIX Code Migration Guide

http://msdn.microsoft.com/practices/

Estndares de desarrollo
Ayudan

a escribir cdigo robusto y seguro


que funciona de manera consistente con el
Framework .NET
Facilitan la propiedad colectiva del cdigo
.NET Framework Design Guidelines

http://msdn.microsoft.com/library/enus/cpgenref/html/cpconnetframeworkdesignguideli
nes.asp

FxCop:

analiza el cdigo managed para


chequear las prcticas recomendadas

http://www.gotdotnet.com/team/libraries/

Application Blocks
Data

Access Application Block for .NET

Componente .NET que contiene cdigo optimizado


de acceso a datos

Exception

for .NET

Management Application Block

Provee un framework simple y extensible para


manejar excepciones

Referencias

Estrategia de migracin:

Gua de migracin a .NET:

Upgrading to .NET: http://msdn.microsoft.com/library/default.asp?


url=/library/en-us/dndotnet/html/upgradingtodotnet.asp

Gua especfica para VB:

Microsoft .NET/COM Migration and Interoperability:


http://msdn.microsoft.com/library/default.asp?url=/library/enus/dnbda/html/cominterop.asp

Upgrade to Visual Basic .NET from Visual Basic 6.0:


http://msdn.microsoft.com/vbasic/techinfo/articles/upgrade/default.asp

Visual Studio 2003:

http://msdn.microsoft.com/vbasic/productinfo/vbasic03/features/default
.asp

2.- Arquitectura del .NET


Framework y la CLR
Objetivos

de diseo
Arquitectura
Beneficios
Compilacin

Introduccin a .NET
Objetivos de diseo de .NET Framework

Entorno consistente de orientacin a objetos:

mismo modelo para ejecucin local, cdigo remoto o entorno


distribuido en Internet

Minimizar conflictos: implantacin y versiones


Proporcionar ejecucin segura de cdigo
Eliminar problemas de rendimiento de cdigo
interpretado o con scripting
Mayor productividad del desarrollador tanto para
aplicaciones Windows como Web
Comunicacin basada en estndares de la industria

Introduccin a .NET
Framework, Lenguajes y Herramientas
VB

C++

C#

JScript

J#

Common Language Specification


Windows
Forms
(.NET CF)

ADO.NET y XML
Base Class Library
Common Language Runtime
Sistema Operativo

Visual Studio .NET

ASP.NET
Web Forms Web Services
Mobile Internet Toolkit

Introduccin a .NET
Framework, Languajes y herramientas
System.Web

Services
Description

UI
HtmlControls

Discovery

WebControls

System.Windows.Forms

Design

Protocols

ComponentModel

System.Drawing

Caching

Security

Drawing2D

Printing

Configuration

SessionState

Imaging

Text

System.Data

System.Xml

OleDb

SqlClient

XSLT

Common

SQLTypes

XPath

Serialization

System
Collections

IO

Security

Runtime
InteropServices

Configuration

Net

ServiceProcess

Diagnostics

Reflection

Text

Remoting

Globalization

Resources

Threading

Serialization

Introduccin a .NET
Beneficios del .NET Framework

Simplifica el desarrollo y la implantacin


Proporciona un entorno de ejecucin seguro
y robusto
Unifica modelos de programacin
Soporta mltiples lenguajes de programacin
Independiente de la plataforma

Introduccin a .NET
Beneficios del .NET Framework

Sistema comn de tipos

Orientacin a objetos:

Instancias y definicin de tipos comunes


Clases e interfaces
Constructores, propiedades, mtodos, eventos
Herencia cruzada entre lenguajes

Interoperabilidad

Con COM
Con DLLs nativas (del estilo Win32)

Introduccin a .NET
Beneficios del .NET Framework

Elimina la fontanera de COM


No ms

Registro

=>Aps autodescriptivas

GUIDs

=>namespaces jerrquicos

Archivos .IDL

=>objetos autodescriptivos

HRESULTs

=>excepciones estructuradas

IUnknown

=>objeto raiz comn

AddRef/Release

=>garbage collector

CoCreateInstance

=>operador new

Introduccin a .NET
Compilacin y ejecucin
Compilacin
Cdigo
fuente

Cdigo
Nativo

Compilador
del
lenguaje

Compilador
JIT
Ejecucin

Cdigo (IL)

Assembly
Metadatos

En instalacin o la
primera vez que se
invoca a cada
mtodo

3.- VB6 vs VB.NET:


Diferencias en el lenguaje

Visual Basic 6 vs. Visual Basic .NET


Compatibilidad con Visual Basic 6
Cambios a nivel de cdigo

Se echaba en falta en VB6 ...

No totalmente orientado a objetos: herencia


No se pueden crear aplicaciones freethreaded
Evitar problemas de registro y versiones
Una programacin Web menos compleja
(respecto a la programacin Windows)
Mecanismos para evitar fugas de memoria
Un tratamiento de errores ms potente
Runtime integrada

Novedades del lenguaje

Herencia, sobrecarga, polimorfismo,


constructores,
Free-threading (procesamiento asncrono)
No se usa el registry
Programacin Web: ASP.NET
Recolector de basura

Novedades del lenguaje (2)

Control de errores estructurado:

La runtime de VB.NET forma parte del Framework.

Try Catch
Incluida en el redistribuible

Ms:

Punteros a funciones (delegates),


nuevos tipos de datos,
comprobacin estricta de tipos,

Compatibilidad ?
No es fcil

VB.NET no es VB6 + nuevas caractersticas


Nuevas caractersticas requieren rediseo
Nuevo formato de ficheros
Interoperabilidad entre lenguajes
Integracin con .NET framework

Librera de compatibilidad

Microsoft.VisualBasic.Compatibility
Cuando no haya nada equivalente
Cuando lo equivalente sea muy diferente
VB6.<nombre de funcin>
No recomendable su utilizacin

'VB6

'Visual Basic.NET

Form1.Show

Form1.Show

Form1.Show vbModal

Form1.ShowDialog

Form1.Show X

VB6.ShowForm(Form1, X)

Cambios a nivel de cdigo

Tipos Variant: sustituidos por Object


No hay propiedades por defecto
Variables a nivel de bloque
Las llamadas a procedimiento necesitan parntesis
Los procedimientos permiten Return
Los parmetros son ByVal por defecto
Posible declarar & inicializar variables
Ms

Imports System.Math
Namespace Geometria
Public Module Module1
Sub Main()
Dim tri As New Triangulo(2, 3, 4)
Console.WriteLine(tri.CalcularArea())
Console.WriteLine(Circulo.Area(5))
End Sub
End Module
Public Class Triangulo
Dim m_a, m_b, m_c As Integer
Public Sub New()
End Sub
Public Sub New (ByVal a As Integer, ByVal b As Integer, ByVal c As Integer)
m_a = a : m_b = b : m_c = c
End Sub
Public Function CalcularArea() As Double
Dim s As Double = (m_a + m_b + m_c) / 2
Return Sqrt(s * (s m_a) * (s m_b) * (s m_c))
End Function
End Class
Public Class Circulo
Public Shared Function Area(ByVal r As Double) As Double
Return Pi * (r ^ 2)
End Function
End Class
End Namespace

Demo 1
Novedades del lenguaje

4.- Acceso a datos: ADO.NET

ADO vs ADO.NET
Caractersticas de ADO.NET
Arquitectura
Enlace a datos (binding)

ADO vs ADO.NET

ADO trabaja bien, pero:

Necesita COM y Windows


Los recordsets no viajan bien a travs de Internet

ADO.NET resuelve estos problemas:

Utiliza XML (a bajo nivel) para realizar el


transporte de datos
XML no tiene requisitos especficos de
runtime/transporte

No se necesita un cdigo especial para hacer el


marshaling a travs de Internet

ADO .NET, una nueva mentalidad:

Entorno desconectado
Todo el transporte de datos utiliza XML

ADO.NET

DBLib, ODBC, DAO, RDO, ADO, . ADO.NET


System.Data: la clase raiz
A partir de ah, principales namespaces:

System.Data.OleDB
System.Data.SQLClient
System.Data.ODBC, System.Data.OracleClient

System.XML: para trabajar directamente con


XML

ADO.NET

System.Data.OleDb: trabaja con todas


las fuentes OLE DB

Soporta unmanaged providers de ADO

System.Data.SQLClient: slo SQL


Server (managed)
VStudio 2003: System.Data.ODBC,
System.Data.OracleClient

Arquitectura de ADO.NET
Presentacin
Windows Forms
MiAp.Exe

DataSet

Negocio

Web forms

Internet
intranet

IE

DataSet

Business to business

(BizTalk, por ejemplo)

Xml

Data object (class)


DataSet

Datos
Data adapter
Data adapter

Diferencia fundamental
En ADO:

Recordset
Buffer de
datos

Acceso a
datos

En ADO.NET:
Buffer de
datos
DataSet

Acceso a
datos
DataAdapter

ADO.NET: Connection

OleDbConnection/SQLConnection
Representa la sesin contra la BD
Utilizados por objetos Data Adapter y Command
para recuperar/actualizar
Inicia las transacciones

Connection.BeginTransaction() devuelve un objeto


Transaction
xxxTransaction
Un comando se enlista en una transaccin
IsolationLevel
Commit() / Rollback()

Configuracin del pool de conexiones en el


connection string

ADO.NET: Command

OleDbCommand/SQLCommand
Representa Transact-SQL o procedimientos
almacenados
Devuelve un resultset (ExecuteReader), un
valor (ExecuteScalar), o ejecuta sentencias de
modificacin (ExecuteNonQuery)
Generacin automtica con el objeto
CommandBuilder

ADO.NET: DataReader

OleDbDataReader/SQLDataReader
Stream forward-only read-only
Utilizado por el DataAdapter
Muy rpido
Creado por un objeto Command
(ExecuteReader)

ADO.NET: DataAdapter

OleDbDataAdapter/SQLDataAdapter
Representa un conjunto de Commands y una
Connection
Puente entre el DataSet y la BD
Lee y actualiza la BD:

SelectCommand, UpdateCommand,
InsertCommand, DeleteCommand

ADO.NET DataAdapter
DataAdapter
SelectCommand

Base de datos

InsertCommand
UpdateCommand
DeleteCommand
TableMappings

DataSet

ADO.NET: DataSet

Objeto estrella en ADO.NET


Representa una cach de datos en memoria
Contiene DataTables
Lee y escribe datos y esquemas en XML
Serializable
Puede ser tipado o no tipado:

Ambos heredan de la clase DataSet


El tipado se apoya en un esquema XML (.XSD)
para generar la clase
El tipado tiene ventajas:

Expone estructura como propiedades y mtodos:


Intellisense
Recoge la Primary key

ADO.NET: Otros objetos

DataTable

DataView

Representa una tabla en memoria


Lo rellena un DataAdapter o a mano
Componente principal de los objetos DataSet y
DataView
Vista personalizada de un objeto DataTable
Filtros, ordenacin, bsquedas

DataRelation

Define relaciones entre tablas


Utiliza columnas de un DataTable

ADO.NET - DataSet
DataSet

DataTable
DataColumn

DataTable

DataRow

Relations
XML Schema

Constraints

ADO.NET: Lecturas

Mtodo Fill del objeto DataAdapter


Se utiliza el SelectCommand del DataAdapter
Inserta/actualiza datos del DataSet

Si la tabla existe, actualiza datos


Si no existe, crea y rellena la tabla
Una tabla por cada resultset

Mantiene la conexin en su estado original

ADO.NET: Actualizaciones

La funcionalidad en ADO es implcita.


Recordset = caja negra.

En ADO.NET: Se crea un modelo ms


explcito y transparente.

Ejemplo: UpdateBatch

InsertCommand, UpdateCommand,
DeleteCommand
Eventos de Update

CommandBuilder: generacin automtica de


los comandos de Insert, Update y Delete a
partir del SelectCommand

ADO.NET: Actualizaciones

DataAdapter.Update:

Analiza los cambios del DataSet


Ejecuta los comandos Insert, Update y
Delete necesarios
Refresca el DataSet

Orden de ejecucin por defecto:

Insert, Update y Delete.

ADO.NET: Enlace a datos

ADO .NET soporta enlazar (binding)


DataSets a Windows Forms / Web
Forms y sus controles
VStudio .NET incluye bastantes
wizards para hacer el enlace entre
datos y controles

Demo 2:
Aplicacin maestrodetalle

5.- Asistente de actualizacin


de aplicaciones: cdigo

Consideraciones
Asistente: lo no soportado
Upgrade Wizard
Final de la actualizacin

Consideraciones

Opciones

El nuevo cdigo .NET podr ser:

Aprovechar las caractersticas del .NET Framework


Aprovechar las caractersticas de Visual Basic .NET

Desventajas de la actualizacin

Creado desde cero


Migrado Upgrade Wizard

Ventajas de la actualizacin

Continuar con VB6


Interoperar entre VB6 y VB.NET
Actualizar a VB .NET

Algunas caractersticas no se actualizan


Ms trabajo de desarrollo y pruebas

La actualizacin de cdigo es slo una parte

Consideraciones

Migracin horizontal

Una sola capa, al


completo

Migracin vertical

Aislar y reemplazar una


parte en todas las capas

Consideraciones

Elegir una estrategia que minimice el riesgo


Elegir actividades que permitan continuar
utilizando la base de cdigo COM mientras nos
movemos a .NET
Sacar partido rpidamente a las nuevas
funcionalidades del entorno .NET
Factores a tener en cuenta:

Aislamiento
Nueva funcionalidad
Uso intensivo de recordsets entre capas
Arquitectura existente

Asistente: lo no soportado

Data binding de DAO y RDO


Controles de Visual Basic 5.0
Aplicaciones DHTML
ActiveX documents
Pginas de propiedades
Add-ins
Controles de usuario
(Web classes)

Upgrade Wizard
Aspecto del formulario
Controles ActiveX
ADO (data binding)
Archivos .RES
Cdigo
Cambios de sintaxis
Libreras COM
Avisos de comportamiento

Final de la actualizacin

Proyecto Visual Basic .NET


El Upgrade Wizard enumera:

Upgrade issues
Upgrade to-dos
Upgrade warnings
Upgrade notes

Completar los cambios


Compilar la aplicacin

Demo 3:
Upgrade Wizard

6.- Interoperabilidad con COM

Migrar o interoperar
COM y .NET
Llamadas desde .NET a COM
Llamadas desde COM a .NET

Migrar o interoperar

Migrar

Todo el cdigo en un entorno consistente


Actualizar para tomar ventaja de .NET

Interoperar

Reutilizar cdigo existente


Preservar inversiones
Acceso a funcionalidad no migrable

COM y .NET

Componentes
DCOM
COM+
Recordset
</>
IUnknown/IDispatch
GUID/CLSID/etc

Assemblies
Remoting
EnterpriseServices
DataSet
Serialization
</>
</>

COM y .NET

.NET utilizando COM

Los tipos .NET pueden acceder a tipos COM


Vuelta al registry y a las limitaciones de implantacin actuales

COM

.NET

COM utilizando .NET

Los tipos COM pueden acceder a tipos .NET

COM

.NET

Llamadas desde .NET a COM


Common
Language Runtime
Servidor COM

Objeto
Runtime
Callable Wrapper

Referencias
por contador

RCW:
Creado con Visual Studio .NET
tlbimp.exe
Primary interop assembly
Marshal.ReleaseComObject()

Cliente
Referencias
traceadas

Llamadas desde COM a .NET

Servidor COM

IUnknown
IDispatch

Common
Language Runtime
COM
Callable
Wrapper

IPropio

Objeto

IPropio
Referencias
por contador

Cliente

Referencias
traceadas

Llamadas desde COM a .NET

Creacin del assembly .NET:

COM Callable Wrapper

Definir interface en el componente


Tipos pblicos
Opcional: crear strong name e incluir en la GAC
Crear el assembly con Visual Studio .NET
Exportar la librera de tipos con tlbexp.exe

Hacer que el assembly est disponible para


COM

regasm.exe,
Global Assembly Cache (GAC)

Demo 4:
COM Interop

7.- Implantacin
Smart Clients

Consideraciones
Nuevas opciones
No-Touch
Seguridad
Apoyos

Implantacin
Consideraciones

Impacto en el sistema

Implantacin la primera vez

La instalacin de la aplicacin 1 romper la


aplicacin 2 ?
Cada cliente debe tener la aplicacin
explcitamente instalada

Actualizacin de la aplicacin

Si hay cambios en el interfaz de usuario, cada


cliente debe reinstalar la aplicacin para
actualizarse

Implantacin
Consideraciones

Problema a resolver:
Ejecutar o actualizar una aplicacin sin
tocar el cliente

Si ya utilizamos un software de gestin de


instalaciones (IntelliMirror, SMS, etc),
continuar utilizndolo.

Implantacin
Consideraciones

Las aplicaciones son aisladas

Implantacin privada por defecto


Las aplicaciones son autodescriptivas

Pueden coexistir mltiples versiones

La comparticin es controlada y explcita:

Strong name, GAC

Por defecto, las aplicaciones utilizan el assembly


con el que fueron construidas, no la ltima
versin
Side-by-side

Implantacin
Nuevas opciones

La implantacin es simple

XCOPY en el cliente
Ejecucin desde un recurso de red
Click sobre un enlace en el browser (no touch)

No-touch deployment

Por defecto, aislamiento de aplicaciones


No se necesita registro
Componentes compartidos (strong names,
versin)

Implantacin
No touch
Aplicacin
cliente

Internet
Explorer

.NET
Framework

HTTP

MiApp.exe

Managed
Exe?
HTTP

MiApp.dll
Web Server

Download
Cache

Implantacin
No-Touch

Ejecutable lanzado como URL (IEEXec)


Sin instalacin, actualizacin automtica

Almacenamiento en download cache

C:\Documents and Settings\usuario\Local Settings\Application Data\assembly

Descarga slo cuando hay actualizaciones


Por usuario

Click en un link en el browser


El EXE y los assemblies referenciados se descargan
Otros assemblies: utilizar Assembly.LoadFrom

Descarga de assemblies dependientes: segn


se van necesitando

Implantacin
No-Touch con loader

Otra opcin: EXE local pequeo: loader


Carga de assemblies desde un Web server

La aplicacin se descarga en tiempo de ejecucin


Para actualizar la aplicacin, actualizar los
assemblies del servidor

Para cargar los assemblies:


Assembly.LoadFrom(URL)

URL: URL a un assembly


Descarga y cachea el assembly
Chequeo automtico de nuevas versiones
Permisos: depende de dnde viene el assembly

Implantacin
Seguridad

Las aplicaciones son semi-confiables

Se ejecutan, y pueden realizar un nmero limitado


de tareas
Seguridad en funcin del origen de la aplicacin
(de dnde viene)
Similar a pginas web en el browser

Configuracin de seguridad: herramienta


.NET Framework Configuration
Strong names

Proporcionan un grado de seguridad mayor


Distinto de signcode

Implantacin
Apoyos

Auto Updater (componente):

.NET Client Applications: .NET Application


Updater Component

http://www.gotdotnet.com/team/windowsforms/appupdater.aspx

Artculo en MSDN Magazine:

Write Auto-Updating Apps with .NET and


the Background Intelligent Transfer Service
API (utiliza Windows Update)

http://msdn.microsoft.com/msdnmag/issues/03/02/BITS/default.aspx

Demo 5:
No Touch Deployment

8.- Seguridad
en el .NET Framework

Conceptos de seguridad
Seguridad basada en roles
Autenticacin
Autorizacin

Seguridad

Qu se quiere evitar?

Acceso no controlado a la aplicacin, por parte de


usuarios no conocidos
Acceso ilimitado a toda la aplicacin, por parte de
usuarios autenticados

Qu aporta .NET:

Nuevas herramientas para proteger la informacin del


usuario (ej. System.Security.Cryptography)
Acceso al cdigo

Code-access security (evidencias)

Acceso de usuarios *

De Windows
Genricos

Seguridad
Usuarios: seguridad basada en roles

Roles con una serie de permisos


Fcil administracin
Soporte para

Import de:

Grupos de Windows
Roles genricos
System.Threading
System.Security.Principal

Enterprise Services tambin dispone de roles

Seguridad
Autenticacin

Identificar al usuario

Verificar sus credenciales

Identifica al usuario
Tipo de autenticacin: Windows o Generic

Creacin del objeto Principal

Seguridad Windows
Base de datos
Archivo XML

Creacin del objeto Identity

Incluye el Identity y almacena la pertenencia al role

Se aplica a usuarios Genricos y de Window s

Seguridad
Autenticacin

Usuario de Windows
Dim winIdentity as WindowsIdentity = WindowsIdentity.GetCurrent()
Dim winPrincipal As New WindowsPrincipal(winIdentity)
Thread.CurrentPrincipal = winPrincipal

Usuario Generic
Dim genIdentity as New GenericIdentity(John)
Dim Roles() as String = {Employee,Manager}
Dim genPrincipal As New GenericPrincipal(genIdentity, Roles)
Thread.CurrentPrincipal = genPrincipal

Seguridad
Autorizacin

Proceso de autorizacin de acceso

El usuario ya ha sido autenticado


El usuario solicita realizar una tarea
Se comprueba la pertenencia al role
Se restringe el acceso a ciertas partes de la aplicacin

Seguridad
Autorizacin

Usuarios Windows / Generic


If Thread.CurrentPrincipal.IsInRole(Manager) Or _
Thread.CurrentPrincipal.IsInRole(BuiltIn\Admministrat
ors) Then
BindEmployeesGrid()
BindEmployeeDetailsGrid()
bnViewSalaryReport.Enabled = True
Else
BindEmployeeGrid()
bnViewSalaryReport.Enabled = False
End If

Demo 6:
Seguridad en las
aplicaciones

Preguntas / Dudas
</>

You might also like