Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes...
-
Upload
roberto-salvador -
Category
Documents
-
view
11 -
download
0
Transcript of Desarrollo de componentes en Visual Basic.NET. Descripción Descripción de los componentes...
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
Hilos de ejecución
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
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
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)
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)
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
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
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
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
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
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
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
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
Uso de otros servicios de componentes
Otros servicios de componentes incluyen:
Activación Just-in-time
Componentes encolados
Propiedades compartidas
Sincronización
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
Demostración: Creación de un componente con servicio
Creación de clases de componentes
Arquitectura de una clase de componentes
Creación de una clase de componentes
Arquitectura de una clase de componentes
System.ComponentModel.Component
Clases predefinidas
Clases personalizadas
InterfazIComponent
Clase
base
Clases
derivadasClases 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
Demostración: Creación de un componente Stopwatch
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
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
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
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
Demostración: Creación de una caja de texto mejorada
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
¿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
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
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
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
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
Demostración: Uso de la instrucción SyncLock