Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes...

33
Desarrollo de componentes en Visual Basic .NET

Transcript of Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes...

Page 1: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Desarrollo de componentes en Visual

Basic .NET

Page 2: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Descripción

Descripción de los componentes

Creación de componentes con servicio

Creación de clases de componentes

Creación de controles de formularios Windows Forms

Hilos de ejecución

Page 3: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Descripción de los componentes

Tipos de componentes

Uso de módulos como componentes

Uso de clases como componentes

Uso de componentes en aplicaciones cliente no gestionadas

Descripción de .NET Remoting

Page 4: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Tipos de componentes

Estructuras

Módulos

Clases

Clases de componentes

Componentes con servicio

Controles de usuario

Controles de usuario de formularios Windows Forms

Controles de usuario de formularios Web Forms

Page 5: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Uso de módulos como componentes

Declarar el módulo como público

Referenciar e importar el ensamblado en código cliente

Public Module MyMathFunctions Public Function Square(ByVal lng As Integer) As Long Return (lng * lng) End Function ...End Module 'Client codeImports MyAssembly...Dim x As Long = Square(20)

Public Module MyMathFunctions Public Function Square(ByVal lng As Integer) As Long Return (lng * lng) End Function ...End Module 'Client codeImports MyAssembly...Dim x As Long = Square(20)

Page 6: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Uso de clases como componentes

Declarar la clase como pública

Referenciar e importar el ensamblado en código cliente

Public Class Account Public Sub Debit(ByVal AccountId As Long, Amount As Double) 'Perform debit action End Sub

Public Sub Credit(ByVal AccountId As Long, Amount As Double) 'Perform credit action End SubEnd Class 'Client codeImports MyAssemblyDim x As New Account( )x.Debit(1021, 1000)

Public Class Account Public Sub Debit(ByVal AccountId As Long, Amount As Double) 'Perform debit action End Sub

Public Sub Credit(ByVal AccountId As Long, Amount As Double) 'Perform credit action End SubEnd Class 'Client codeImports MyAssemblyDim x As New Account( )x.Debit(1021, 1000)

Page 7: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Uso de componentes en aplicaciones cliente no gestionadas

Establecer las propiedades del ensamblado

Generar un nombre seguro Seleccionar Registrar para COM Interop en las

opciones de Generar

Exponer miembros de claes a COM y a los servicios de componentes

Definir e implementar interfaces Utilizar el atributo ClassInterface con valor AutoDual

Utilizar el atributo COMClass

Page 8: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Descripción de .NET Remoting

Marshal By Reference

Código cliente

Servidor Proxy Canal

Formateador

Límite de Remoting

Servidor AppDomain

Código cliente

Marshal By Value

Copia objeto servidor

Cliente AppDomain

Canal

Formateador

Objeto servidor

Canal

Formateador

Page 9: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Creación de componentes con servicio

Hospedar componentes en los servicios de componentes

Uso de transacciones

Uso de la agrupación de objetos

Uso de cadenas de constructor

Uso de seguridad

Uso de otros servicios de componentes

Configurar ensamblados para usar los servicios de componentes

Page 10: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Hospedar componentes en los servicios de componentes

Agregar una referencia a System.EnterpriseServices en el ensamblado

El espacio de nombres System.EnterpriseServices proporciona:

Clase ContextUtil

Clase ServicedComponent

Atributos de ensamblado, clase y método

Page 11: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Uso de transacciones

El atributo Transaction especifica cómo participa una clase en las transacciones

La clase ContextUtil proporciona votación en una transacción

El atributo AutoComplete impide el uso de los métodos SetAbort, SetComplete y ContextUtil

<Transaction(TransactionOption.Required)> Public Class Account Inherits ServicedComponent

Public Sub Debit(...) 'Perform debit action

ContextUtil.SetComplete( ) End Sub

<AutoComplete( )> Public Sub Credit(...) 'Perform credit action

'No SetComplete because AutoComplete is on End SubEnd Class

<Transaction(TransactionOption.Required)> Public Class Account Inherits ServicedComponent

Public Sub Debit(...) 'Perform debit action

ContextUtil.SetComplete( ) End Sub

<AutoComplete( )> Public Sub Credit(...) 'Perform credit action

'No SetComplete because AutoComplete is on End SubEnd Class

Page 12: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Uso de la agrupación de objetos

La agrupación de objetos permite crear objetos con antelación

El atributo ObjectPooling especifica MinPoolSize y MaxPoolSize

ServicedComponent proporciona el método CanBePooled

<ObjectPooling(Enabled:=True, MinPoolSize:=5, _ MaxPoolSize:=50)> _

Public Class Account Inherits ServicedComponent ...

Protected Overrides Function CanBePooled( ) As Boolean Return True End FunctionEnd Class

<ObjectPooling(Enabled:=True, MinPoolSize:=5, _ MaxPoolSize:=50)> _

Public Class Account Inherits ServicedComponent ...

Protected Overrides Function CanBePooled( ) As Boolean Return True End FunctionEnd Class

Page 13: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Uso de las cadenas de constructor

Especifican el atributo ConstructionEnabled para indicar que se necesita una cadena de constructor

Reemplazan el método Construct para recuperar información

<ConstructionEnabled(True)>Public Class Account Inherits ServicedComponent

Protected Overrides Sub Construct(ByVal s As String)'Called after class constructor'Use passed in string

End SubEnd Class

<ConstructionEnabled(True)>Public Class Account Inherits ServicedComponent

Protected Overrides Sub Construct(ByVal s As String)'Called after class constructor'Use passed in string

End SubEnd Class

Page 14: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Uso de seguridad

Los atributos de la configuración de seguridad habilitan la configuración de la seguridad y su papel

La clase SecurityCallContext proporciona comprobación de roles y ofrece información sobre el llamador

<ComponentAccessControl(True), seguridadRole("Manager")> _Public Class Account Inherits ServicedComponent

Public Function GetDetails( ) As String With seguridadCallContext.CurrentCall If .IsCallerInRole("Manager") Then Return .OriginalCaller.AccountName End If End With End FunctionEnd Class

<ComponentAccessControl(True), seguridadRole("Manager")> _Public Class Account Inherits ServicedComponent

Public Function GetDetails( ) As String With seguridadCallContext.CurrentCall If .IsCallerInRole("Manager") Then Return .OriginalCaller.AccountName End If End With End FunctionEnd Class

Page 15: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Uso de otros servicios de componentes

Otros servicios de componentes incluyen:

Activación Just-in-time

Componentes encolados

Propiedades compartidas

Sincronización

Page 16: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Configurar ensamblados para usar los servicios de componentes

Establecer atributos a nivel de ensamblado

ApplicationName Description

ApplicationActivation: biblitoteca o aplícación servidora AssemblyKeyFile

Uso de Regsvcs para registrar y crear aplicaciones de servicios de componentes

Regsvcs.exe myApplication.dll Uso de Lazy Registration

Aplicación registrada la primera vez que se utilice por parte de un cliente

Page 17: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Demostración: Creación de un componente con servicio

Page 18: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Creación de clases de componentes

Arquitectura de una clase de componentes

Creación de una clase de componentes

Page 19: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Arquitectura de una clase de componentes

System.ComponentModel.Component

Clases predefinidas

Clases personalizadas

InterfazIComponent

Clase

base

Clases

derivadasClases de componentes

Page 20: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Creación de una clase de componentes

1. Heredar de System.ComponentModel.Component

Realizar las inicializaciones por parte del constructor Sobrecargar el método Dispose

2. Agregar los componentes ubicados

Utilizar elementos del Explorador de servidores o del cuadro de herramientas

3. Crear la funcionalidad requerida

Propiedades, métodos y eventos

4. Generar el ensamblado

Page 21: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Demostración: Creación de un componente Stopwatch

Page 22: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Creación de controles de formularios Windows Forms

Heredar de la clase UserControl

Heredar de un control existente Windows Forms

Proporcionar atributos a los controles

Page 23: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Heredar de la clase UserControl

Heredar de System.Windows.Forms.UserControl

Agregar los controles necesarios al diseñador

Agregar propiedades y métodos que correspondan a los de los controles constitutivos

Agregar propiedades y métodos adicionales

No InitProperties, ReadProperties ni WriteProperties

El almacenamiento de propiedades es automático

Page 24: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Heredar de un control existente Windows Forms

Permite mejorar la versión de un determinado control

Heredar de un control System.Windows.Forms

Public Class MyTextBox Inherits System.Windows.Forms.TextBox

Private strData As String

Public Property HiddenData( ) As String Get Return strData End Get Set(ByVal Value As String) strData = Value End Set End Property ...End Class

Public Class MyTextBox Inherits System.Windows.Forms.TextBox

Private strData As String

Public Property HiddenData( ) As String Get Return strData End Get Set(ByVal Value As String) strData = Value End Set End Property ...End Class

Page 25: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Proporcionar atributos a los controles

System.ComponentModel proprociona atributos a los controles

A nivel de clase: DefaultProperty, DefaultEvent, ToolboxBitmap

A nivel de propiedad: Category, Description, DefaultValue

Imports System.ComponentModel

<ToolboxBitmap("C:\txticon.ico"), DefaultEvent("Click")> _ Public Class MyTextBox Inherits System.Windows.Forms.UserControl

<Category("Appearance"), _ Description("Stores extra data"), _ DefaultValue("Empty")> _ Public Property HiddenData( ) As String ... End Property ...End Class

Imports System.ComponentModel

<ToolboxBitmap("C:\txticon.ico"), DefaultEvent("Click")> _ Public Class MyTextBox Inherits System.Windows.Forms.UserControl

<Category("Appearance"), _ Description("Stores extra data"), _ DefaultValue("Empty")> _ Public Property HiddenData( ) As String ... End Property ...End Class

Page 26: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Demostración: Creación de una caja de texto mejorada

Page 27: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Manejo de hilos de ejecución

¿Qué es un hilo?

Ventajas de múltiples hilos de ejecución

Creación de hilos

Uso de hilos

Cuándo utilizar el manejo de hilos

Page 28: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

¿Qué es un hilo?

La unidad de ejecución que procesa la CPU Todos los procesos de una aplicación contienen al menos un hilo

Los hilos están planificados Parece que el equipo realiza varias tareas a la vez

Cada hilo contiene su propia pila de llamadas y almacenamiento

CPUProceso 1

Proceso 2

Subproc.1

Subproc. 2

Subproc. 3

Subproc. 2

Programador de subprocesos

Subproc. 1Subproc. 3Subproc. 1Subproc. 2Subproc. 3

Page 29: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Ventajas de múltiples hilos de ejecución

Mejor respuesta de la interfaz de usuario

Ejemplo: barra de estado

Sin bloqueos

Comunicación asíncrona

Sin afinidad de hilos

Los objetos no están vinculados a un hilo

Page 30: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Creación de hilos

Uso de la clase System.Threading.Thread

El constructor especifica el método delegado Los métodos proporcionan control del procesamiento de

hilos Las propiedades proporcionan información de estado y

prioridades Utilizar una clase si se requieren parámetros

Permitir acceso público a variables clase Lanzar un evento cuando finalice

Page 31: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Sub Test( ) Dim calc As New Calculate( ) Dim th As New Threading.Thread(AddressOf calc.LongCalculation)

calc.iValue = 10 AddHandler calc.Complete, AddressOf CalcResult th.Start( )End Sub

Sub CalcResult(ByVal Result As Integer) ...End Sub

Sub Test( ) Dim calc As New Calculate( ) Dim th As New Threading.Thread(AddressOf calc.LongCalculation)

calc.iValue = 10 AddHandler calc.Complete, AddressOf CalcResult th.Start( )End Sub

Sub CalcResult(ByVal Result As Integer) ...End Sub

Uso de hilos

Class Calculate Public iValue As Integer Public Event Complete(ByVal Result As Integer) Public Sub LongCalculation( ) 'Perform a long calculation based on iValue ... RaiseEvent Complete(iResult) 'Raise event to signal finish End SubEnd Class

Class Calculate Public iValue As Integer Public Event Complete(ByVal Result As Integer) Public Sub LongCalculation( ) 'Perform a long calculation based on iValue ... RaiseEvent Complete(iResult) 'Raise event to signal finish End SubEnd Class

Page 32: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Cuándo utilizar el manejo de hilos

Utilizar los hilos con precaución

El uso de más hilos requiere más recursos del sistema

Sincronizar el acceso a recursos compartidos

Evitar que dos hilos accedan simultáneamente a datos compartidos

Utilizar la instrucción SyncLock para bloquear secciones de código

Sub Worker( ) SyncLock(theData) 'Lock this object variable theData.id = iValue 'Perform some lengthy action iValue = theData.id End SyncLock 'Unlock the object variableEnd Sub

Sub Worker( ) SyncLock(theData) 'Lock this object variable theData.id = iValue 'Perform some lengthy action iValue = theData.id End SyncLock 'Unlock the object variableEnd Sub

Page 33: Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes Creación de componentes con servicio Creación de clases de componentes.

Demostración: Uso de la instrucción SyncLock