visual basic - tecnología, tips de programación y … · visual studio 2005, junto con sql server...

92
Novedades en Novedades en la seguridad en la seguridad en V isual Studio 2005 isual Studio 2005 • Pr • Pr ogramando para ogramando para 64 bits con .NET Fra 64 bits con .NET Fra- mework 2.0 • Novedades mework 2.0 • Novedades para desarr para desarr ollo W ollo Web en ASP eb en ASP .NET 2.0 • .NET 2.0 • Optimización ASP Optimización ASP .NET 2.0 • Novedades .NET 2.0 • Novedades en el estándar de C#• “Reflexionando” y en el estándar de C#• “Reflexionando” y haciendo “r haciendo “r eflexión” sobr eflexión” sobr e la genericidad e la genericidad de .NET 2.0 • Novedades de V de .NET 2.0 • Novedades de V isual Basic isual Basic 2005• ¿Maestr 2005• ¿Maestr o-detalle con V o-detalle con V isual Basic isual Basic 2005? • El IDE de V 2005? • El IDE de V isual Studio 2005 • isual Studio 2005 • Novedades en la extensibilidad de V Novedades en la extensibilidad de V isual isual Studio 2005 • ADO.NET 2.0, más y mejor Studio 2005 • ADO.NET 2.0, más y mejor acceso a datos acceso a datos dotNetManía nº20 noviembre 2005 • 8,50 (España) Visual Basic • C# • Delphi • ASP.NET • ADO.NET • .NET Framework • Windows Server System dotNetManía www.dotnetmania.com Dedicada a los profesionales de la plataforma .NET

Upload: phunghanh

Post on 04-Oct-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Novedades enNovedades enla seguridad enla seguridad en

VVisual Studio 2005isual Studio 2005• Pr• Programando paraogramando para64 bits con .NET Fra64 bits con .NET Fra--

mework 2.0 • Novedadesmework 2.0 • Novedadespara desarrpara desarrollo Wollo Web en ASPeb en ASP.NET 2.0 •.NET 2.0 •

Optimización ASPOptimización ASP.NET 2.0 • Novedades.NET 2.0 • Novedadesen el estándar de C#• “Reflexionando” yen el estándar de C#• “Reflexionando” yhaciendo “rhaciendo “reflexión” sobreflexión” sobre la genericidade la genericidadde .NET 2.0 • Novedades de Vde .NET 2.0 • Novedades de Visual Basicisual Basic2005• ¿Maestr2005• ¿Maestro-detalle con Vo-detalle con Visual Basicisual Basic2005? • El IDE de V2005? • El IDE de V isual Studio 2005 •isual Studio 2005 •Novedades en la extensibilidad de VNovedades en la extensibilidad de VisualisualStudio 2005 • ADO.NET 2.0, más y mejorStudio 2005 • ADO.NET 2.0, más y mejoracceso a datosacceso a datos

dotNetManíanº

20 n

ovie

mbr

e 200

5 •

8,50

€(E

spañ

a)Visual Basic • C# • Delphi • ASP.NET • ADO.NET • .NET Framework • Windows Server System

dotNetManíawww.dotnetmania.com Dedicada a los profesionales de la plataforma .NET

Page 2: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-
Page 3: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Bienvenido al número 20, de noviembrede 2005, de dotNetManía, el número quemás horas de sueño nos ha quitado :-).

El día 7 de noviembre se habrá pre-sentado oficialmente la nueva versiónVisual Studio 2005, junto con SQL Server2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-cial dedicado exclusivamente al nuevoVisual Studio 2005, tal y como hicimos yacon SQL Server 2005.

Nuestro objetivo es que usted tenga,después de leerlo, una idea bastante apro-ximada de las novedades más importantesde Visual Studio 2005 y .NET Framework2.0. Para lo cual hemos dedicado 32 pági-nas más de lo habitual y un buen puñadode horas extraordinarias. Aún así, han que-dado cosas en el tintero pues las novedadesson muchas, ciertamente.

Este mes publicamos las entrevistas aBrian Keller, Program Manager de VisualStudio 2005, y a Mike Hernández y DonaldDrake, del equipo de desarrollo de VisualStudio Tools for Office 2005, otro de losgrandes cambios en esta versión.

Hemos escrito sobre algunas edicionesnuevas: Visual Studio Team System y VisualStudio Web Developer Express Edition.

Procuramos abarcar las novedades de.NET Framework más relevantes: la nue-va capacidad de generar código nativo de64 bits, las novedades en cuanto a la segu-ridad, los nuevos ADO.NET 2.0, .NETCompact Framework 2.0 y ASP.NET 2.0;este último con dos artículos, uno genéri-co y otro más en detalle enfocado a la opti-mización.

Y también, cómo no, algunas noveda-des que afectan a los lenguajes de progra-mación, con artículos generales para VisualBasic y el nuevo estándar ECMA de C#; ade-más, otro más específico de generics con C#y uno más explicando la generación de códi-go para Visual Basic con uno de los asisten-tes. Microsoft ha puesto especial cuidado enahorrarnos líneas de código innecesarias;según comenta José M. Alarcón en su artí-culo, hasta un 70% en ASP.ET 2.0 con res-pecto a ASP.NET 1.x.

No nos hemos olvidado del IDE deVisual Studio 2005, nuestro banco de tra-bajo, que sufre cambios significativos.Enfocado desde un punto de vista general ytambién más específicamente con las nove-dades sobre la extensibilidad.

Seguramente debimos hacer más hin-capié en las nuevas capacidades de desplie-gue; por supuesto, las cinco páginas dedi-cadas a Team System son insuficientes; lasdos dedicadas a seguridad sólo dan paraapuntar novedades; nos hemos dejado atrása J#,... En fin, faltan muchas líneas porescribir, afortunadamente. Aquí no hacemás que comenzar nuestro trabajo con estanueva versión.

Mi más sincero agradecimiento a laspersonas de Microsoft Ibérica que nos hanapoyado incondicionalmente y, porsupuesto, a todos los redactores que se hanimplicado y que han trabajado duro paraque esto fuera un todo y no la suma de susindividualidades.

Lo mejor es que se ponga cómodo,pase página y deje esta editorial para leeralgo más interesante.

dotN

etM

anía

<<

3

Visual Studio 2005dotNetManíaDedicada a los profesionales de la plataforma .NET

Vol. II •Número 20 • Noviembre 2005Precio: 8,50€

EditorPaco Marín

([email protected])

AdministraciónPilar Pérez

([email protected])

Asesor TécnicoMarino Posadas

([email protected])

RedactoresAntonio Quirós, Dino Esposito, Guillermo

'guille' Som, Jorge Serrano, José ManuelAlarcón, Luis Miguel Blanco, Miguel Katrib

(Grupo Weboo).

Colaboradores habitualesÁngel Esteban, Braulio Díez, Daniel Mazzini,

Eladio Rincón, Erich Bühler, FernandoNogueras, Jorge Crespo Cano, José MiguelTorres, Miguel Egea, Octavio Hernández,

Pablo Abbate, Pepe Hevia, Rodrigo Corral ySalvador Ramos.

Además colaboran en este númeroAlberto Ruíz, Carlos Quintero, Javier

Izquierdo, José Murillo, Mario del Valle ySergio Vázquez

Edición y Suscripciones.netalia

c/ Robledal, 13528529 Rivas-Vaciamadrid (Madrid)

Tf. (34) 91 666 74 77Fax (34) 91 499 13 64

PublicidadMediadev

Sophie Mancini ([email protected])Tf. 93 426 22 57 - 670 99 74 64

Fax. 93 423 11 40

ImprimeGráficas Vallehermoso

www.graficasvallehermoso.com

ISSN1698-5451

Depósito LegalM-3.075-2004

<<

dnm.editorial

Page 4: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

20dnm.sumario

dnm

.sum

ario

Visual Studio 2005, un entorno de desarrollo para todos los gustos 8-10Presentación de Javier Izquierdo, gerente de producto de Visual Studio de la nueva versión.

Entrevista a Brian Keller 12-13Program Manager de Visual Studio 2005

Novedades en la seguridad en Visual Studio 2005 14-15

Programando para 64 bits con .NET Framework 2.0 16-17

Novedades para desarrollo Web en ASP.NET 2.0 y Visual Web Developer 2005 18-24

Optimización ASP.NET 2.0. ¡Como una moto! 25-29

dnm.laboratorio 30-32Visual Studio 2005 Web Developer Express

Entrevista a Mike Hernández y Donald Drake 34-35Equipo de desarrollo de Visual Studio Tools for Office 2005

Novedades en el estándar de C# 36-39

“Reflexionando” y haciendo “reflexión” sobre la genericidad de .NET 2.0 40-46

Novedades de Visual Basic 2005 48-55

¿Maestro-detalle con Visual Basic 2005? ¡Chupado! 56-59

El IDE de Visual Studio 2005 60-63

Novedades en la extensibilidad de Visual Studio 2005 64-68

dnm.laboratorio 70-72.NET Compact Framework 2.0

ADO.NET 2.0. Más y mejor acceso a datos 74-80

Visual Studio 2005 Team System 81-84

dnm.todotnet.qa 86-88Visual Studio 2005 tips & tricks

dnm.biblioteca.net 89Visual C# 2005: A developer's notebook (Jesse Liberty)Pro C# 2005 and the .NET 2.0 Platform (Andrew Troelsen)

dnm.desvan 90

Page 5: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-
Page 6: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Delphi 2006, C#Builder 2006 y C++Builder 2006 ofrecen apartir de ahora BorlandDeveloper Studio –elentorno de desarrollomultilenguaje de Bor-land para las aplicacio-nes Microsoft Win-dows y .NET–. Se tra-

ta del único entorno de desarrollo integra-do que incluye soporte para las aplicacio-nes Delphi/Delphi .NET, C, C++ y C#.Los clientes que adquieran cualquiera deestos productos obtendrán un soporte paralos cuatro lenguajes sin costes adicionales,con la flexibilidad de personalizar las capa-cidades específicas del lenguaje.

Las nuevas mejoras de Delphi 2006,tales como un sistema de plantillas en direc-to, refactorings avanzados que automatizan

los cambios de código fuente y la integra-ción perfecta con herramientas ALM deBorland, ayudan a reducir el tiempo y elcoste de construcción, gestión, manteni-miento y ampliación de las aplicacionesWindows y .NET.

Los usuarios de Delphi también pue-den acelerar el desarrollo con soporte paraingeniería inversa, “prototipaje” rápido eintegración avanzada de IDE con modela-do UML, requerimientos, control de ver-siones, seguimiento de bugs y colaboraciónentre equipos. Con soporte para Microsoft.NET Framework, ASP.NET, VCL.NET,VCL y Win32 SDK. Además, dado queDelphi soporta tanto Win32 como .NET,los clientes pueden continuar con el desa-rrollo y mantenimiento de las aplicacionesWin32 existentes, a la vez que simplificanel camino hacia .NET Framework y las apli-caciones Windows de próxima generación.

ECO III, el marco único de Borlandpara Delphi 2006 y C# Builder, ofrece ser-vicios para aplicaciones como el mapeadorelacional de objetos (ORM) y la persis-tencia transparente de objetos, lo que evi-ta a los desarrolladores la complejidad deconstruir y mantener sus propios serviciospersonalizados.

ECO III también contribuye a que eldesarrollo basado en el diseño sea una rea-lidad gracias a su Framework basado enmodelos, especialmente útil para la crea-ción de aplicaciones de bases de datos basa-das en formularios para servicios Web,ASP.NET y Windows.

Estas nuevas versiones se presentaránen Madrid y Barcelona el 15 y 16 denoviembre respectivamente, con la pre-sencia de Jason Vokes, Director de Productode Borland. Para más información e ins-cripción: 902 34 45 56 y en www.borland.es.

dotN

etM

anía

<<

6

dnm.noticias<<n

oti

cia

s.n

oti

cia

s.n

oti

cia

s.n

oti

cia

s.n

oti

cia

s.n

oti

cia

s

Business Objects ha anunciado hoy ladisponibilidad de BusinessObjects XI Release2. Las mejoras y los nuevos productos queincorpora BusinessObjects XI Release 2 ofre-cerán a los usuarios una mayor simplicidadde manejo, información más fiable, asícomo la posibilidad de estandarizar toda suinfraestructura en torno a una única plata-forma de BI.

BusinessObjects Intelligent Question

Business Objects ha presentado tam-bién BusinessObjects Intelligent Question, unnuevo producto que proporciona una inter-faz más fácil de utilizar, que resultará atrac-tiva para un nuevo colectivo de usuariosempresariales. Con Intelligent Question, elusuario de a pie puede formular fácilmen-te preguntas acerca de su negocio y recibirrespuestas sin necesidad de ejecutar con-sultas ni de entender de datos.

Mejoras en Web Intelligence

BusinessObjects XI Release 2 intro-duce importantes mejoras en WebIntelligence La nueva versión de WebIntelligence sincroniza datos proceden-tes de varias fuentes distintas, lo que

permite a los usuarios realizar consul-tas y análisis sobre esas fuentes de unaforma más sencilla. Ahora los usuariospueden integrar información proce-dente de bases de datos OLAP y rela-cionales y efectuar consultas y análisisde manera integrada a partir de esosdatos, como si estos procediesen de unasola fuente.

BusinessObjects Desktop Intelligence

El producto BusinessObjects DesktopIntelligence, antes conocido como “clientecompleto” (Full Client), permite a todos losclientes de Business Objects disfrutar detodas las ventajas de la plataformaBusinessObjects XI, incluidas las funcionali-dades de toma de decisiones colaborativas,la integración con Microsoft Live Office,y la BI Encyclopedia, que ofrece informa-ción de contexto adicional sobre el nego-cio. Con Desktop Intelligence, los usuariostienen a su disposición un lugar unificadodesde donde ver todo el contenido de BI ycompartirlo con sus otros colegas.

BusinessObjects Composer

BusinessObjects Composer es un produc-to nuevo e innovador que ayuda a los res-ponsables de TI a mejorar su eficiencia yla calidad de diseño de sus proyectos deextracción, transformación y carga de datos

(ETL). Los proyectos de ETL suelen dise-ñarse de forma ad hoc, en un proceso parael cual escasean las mejores prácticas.Cuando un responsable de TI empieza adiseñar un proyecto de ETL, ha de definirminuciosamente la correspondencia exac-ta entre cada fuente de datos y las necesi-dades empresariales de los usuarios finales.Con BusinessObjects Composer, los desarro-lladores pueden documentar fácilmentetodo el proceso de ETL. Ahora pueden ini-ciar nuevos proyectos de ETL de mayornivel con sólo consultar proyectos realiza-dos anteriormente.

Gestión automatizada del ciclo de vida de BI

Las nuevas funcionalidades de Business-Objects XI Release 2 permiten a los respon-sables de informática gestionar con mayorfacilidad las implantaciones de BI de las queya disponen. Ahora los responsables de TIpueden utilizar herramientas de gestiónautomatizada del ciclo de vida para movercualquier objeto u aplicación de BI, a tra-vés de los entornos de desarrollo, pruebasy producción. Esta nueva característica per-mite a las organçizaciones reducir el costede mantenimiento de sus implantacionesde BI, facilitando al mismo tiempo suampliación gradual.

Para más información: http://www.busi-nessobjects.com.

Business Objects presenta BusinessObjects XI Release 2

Borland presenta Delphi 2006,C# Builder 2006 y C++ Builder 2006

Page 7: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

dnm.noticias

dnm.noticias

dotN

etM

anía

<<

7

El evento reunió a alrededor de 1.000desarrolladores para mostrarles las más avan-zadas tecnologías y experiencias en desarro-llo de software.

En este segundo año, Compuware haampliado el alcance del evento incluyendolas tecnologías de desarrollo Microsoft .NETy Java, las dos mayores plataformas que estánusando actualmente las empresas para eldesarrollo y la implantación de aplicacionesdistribuidas.

El encuentro tuvo como objetivo mostrary educar sobre las habilidades y estrategias másavanzadas para incrementar la productividaddel desarrollo, el ROI (retorno de inversión) y lacalidad, con independencia de la tecnologíasubyacente. La edición de este año contó conpresentaciones relevantes tanto por parte deMicrosoft como de Eclipse.

El evento se desarrolló en un ambienteabierto e incluyó sesiones técnicas, laborato-rios de aprendizaje interactivo, estudios realesde casos de desarrollo y conferencias de exper-tos. Los desarrolladores, sus jefes y los CIOpudieron aprender tendencias y técnicas de lamano de algunos de los más brillantes y con-sumados visionarios de la industria.

Soporte para Visual Studio 2005

Compuware anunció en este evento elsoporte para Microsoft Visual Studio 2005de sus herramientas para la ayuda al desa-rrollo, testeo, gestión de aplicaciones.

“Compuware es un miembro importantey valioso del programa Visual Studio IndustryPartner (VSIP) y tiene un rica tradición en apli-caciones empresariales”, dijo Rick LaPlante,General Manager de Visual Studio 2005 TeamSystem en Microsoft Corporation (al que tuvi-mos la ocasión de entrevistar el mes de mayopasado). “Nosotros estamos muy contentos de

ver la solidez de Compuware y la continuadainversión en tecnologías .NET y su concen-tración en la innovación sobre aplicaciones delciclo de vida”.

Compuware participará como gold sponsoren el próximo Microsoft Visual Studio 2005Launch Tour en el que se presentará VisualStudio 2005 a nivel mundial. En él,Compuware presentará la siguiente versión deCompuware TestPartner con capacidades depruebas funcionales y de regresión, integradasen Microsoft Visual Studio 2005 Team System.

Además, Compuware planea introduciruna nueva versión de CompuwareDevPartner Studio con una completa inte-gración en el IDE de Visual Studio 2005:DevPartner Studio 8.0 que ofrecerá soportemejorado para servicios Web, una nueva e inno-vadora característica llamada Performance Experty capacidades para la simulación de fallos.Adicionalmente, Compuware introducirá unanueva versión de DevPartner Fault Simulatorque se integra con DevPartner Studio.

A principios de 2006, Compuware tienepensado liberar la próxima versión de su herra-mienta de análisis de seguridad DevPartnerSecurityChecker, con soporte para VisualStudio 2005.

Más información sobre este evento en: http://www.compuwareojx.com

Compuware celebró el 6 de octubre en su sede central de Detroit el segundo encuentro tecnológicoOJ.X y donde se mostraron las más novedosas tecnologías de desarrollo de aplicaciones

OJ.X de Compuware

Eventos

Alhambra-Eidos, empresa especializadaen facilitar soluciones a las necesidades empre-sariales en el ámbito de las TIC, ha celebradosus 15 años de trayectoria en este sector.

A la fiesta asistieron más de 300 personasentre empleados, clientes, colaboradores ymedios de comunicación.

Durante estos 15 años de experiencia,Alhambra-Eidos se ha convertido en una delas empresas punteras del mercado nacional,con una amplia proyección y profesionales alta-mente cualificados, que se ha reflejado en los

reconocimientos de fabricantes como CiscoSystems o Microsoft, entre otros. Más infor-mación en: http://www.alhambra-eidos.com.

Alhambra-Eidos celebra su 15 cumpleaños

Para la presenta-ción en España deVisual Studio 2005,SQL Server 2005 yBizTalk Server 2006,Microsoft Ibérica tie-ne previstos dos even-tos de carácter intro-ductorio y general:

uno en Barcelona que se celebrará el día 15de noviembre en el salón La Sagrada Familiadel hotel AC Barcelona, coincidiendo con elIT Forum; y otra en Madrid que se celebra-rá el día 17 de noviembre en la Sala Retiro,entre el pabellón 8 y 10 del recinto ferial IFE-MA y coincidiendo con el SIMO.

Más información sobre estos eventos yregistro en: http://www.encuentromicrosoft.com.

Más adelante para la presentación de laversión española de estos productos habráuna gira por 14 ciudades españolas, aún pordecidir. Incluiremos detalles de estos even-tos el próximo mes.

Como ya informamos el mes pasado, el7 de noviembre Steve Ballmer será elencargado de anunciar este lanzamientoen un evento de un solo día que se cele-brará en San Francisco, en el MosconeWest Convention Center.

Más información en: http://www.micro-soft.com/launchtour2005.

Lanzamiento de Visual Studio2005 y SQL Server 2005El 15 y 17 de noviembre, en Barcelona yMadrid, son las fechas y los lugares elegidospara la presentación más esperada de los dosúltimos años.

HP Integrity Summit 2005

Durante los días 5 y 6 de Octubre enMadrid, se ha celebrado el HP IntegritySummit 2005 que este año se componía delHP Integrity Developer Forum para desa-rrolladores y del HP Integrity Forum, diri-gido a las grandes empresas españolas .

La tercera edición del HP IntegrityDeveloper Forum se ha celebrado con un grandespligue tecnológico, con un área de traba-jo de 4.000m2, un taller de programación conmás de 100 puestos de trabajo y 300 cone-xiones en red, un centro de proceso de datoscon 70 servidores de alta disponibilidad.

Alrededor de 50 desarrolladores tuvieronla oportunidad de migrar aplicaciones realesa plataformas de 64 bits con la asistencia detécnicos de las diferentes empresas partici-pantes: Intel, Bea, Oracle, Microsoft...

Más información en http://www.hp.es.

Page 8: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Visual Studio 2005Un entorno de desarrollo para todos los gustos

<< desde que Microsoftpresentó la primera versión de Visual Studio, la sui-te de herramientas de desarrollo para trabajar enentornos Windows. Por aquel entonces, con VisualStudio 97, básicamente se siguió el concepto de otrospaquetes y sencillamente se procedió a incluir losdiferentes productos existentes en un mismo paque-te, pero cada uno tenía su propio ejecutable y tra-bajaban por separado, con lo que los desarrollado-res habitualmente aprendían a manejar un solo len-guaje de programación.

Aún hubo otro producto, Visual Studio 6.0, conla misma filosofía aunque con sensibles mejoras conrespecto a su antecesor. Pero ya en el 2000 el pro-pio Bill Gates anunció públicamente el cambiotrascendental que Microsoft planeaba para su futu-ra línea de productos… estamos hablando de .NET,la plataforma de aplicaciones empresariales deMicrosoft que como buenos lectores de esta revis-ta ya conocen con bastante detalle.

Así, en la primavera de 2002 presentamos al mer-cado el nuevo Visual Studio .NET 2002, y con él la basede este cambio, el primer .NET Framework, así comoASP.NET y un nuevo y moderno lenguaje basado enC, que desde su creación ha recibido el apoyo denumerosos académicos y desarrolladores profesiona-les, quienes ya lo han convertido en uno de los másutilizados en la actualidad; nos referimos por supues-to a C#. Había llegado la hora de los servicios Web yla programabilidad de Internet.

Este primer Visual Studio .NET cambiaba drás-ticamente el concepto de la suite de desarrollo, alofrecer un entorno de trabajo integrado y únicoindependientemente del lenguaje de programaciónempleado (existen casi 30 lenguajes .NET ahoramismo), y permitiendo la utilización de diferenteslenguajes en un mismo proyecto. .NET comenza-ba a despertar el interés de la comunidad de desa-rrollo, y en poco tiempo se convertía en una alter-

Javier Izquierdo

Han pasado casi diez años

Javier IzquierdoEs Ingeniero Técnico de Obras

Públicas por la UPM y Gerente de Producto de Visual

Studio desde julio de 2000

Es realmente una gran satisfacción para mí el presentar la nueva versión de Visual Studio,que acaba de lanzarse conjuntamente con SQL Server. Juntos, estos productos ofre-cen una completa plataforma que permite a las organizaciones satisfacer las nuevasdemandas de sus negocios y con la que las empresas podrán generar soluciones conec-tadas más rápida y eficientemente, desarrollar las aplicaciones de misión crítica másexigentes y tomar decisiones mejor fundamentadas.

Visual Studio 2005 es el mejor entorno de desarrollo creado hasta

el momento y con la amplia variedad de versiones ofrecidas

estamos seguros de que todos los desarrolladores encontrarán la

solución a sus necesidades

Page 9: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

nativa reconocida como plataformade aplicaciones empresariales.

Solo un año después estaba dispo-nible una versión actualizada del pro-ducto, Visual Studio .NET 2003, la cualincluía ya J# (la sintaxis Java para.NET) y sobre todo, aparte de mejo-ras de rendimiento y resolución debugs, integraba el desarrollo para dis-positivos móviles, que hasta el momen-to requería de la utilización de otrasherramientas.

Y así llegamos hasta el presente,con el esperado lanzamiento de lanueva versión, Visual Studio 2005 (yano es necesaria la inclusión de .NETen el nombre del producto, pues haquedado constatado que es el funda-mento de la plataforma Microsoft),el cual ha sido presentado conjunta-mente con SQL Server 2005, con elque está perfectamente integrado, eneste mes de noviembre (aunque aúndeberemos esperar unas semanas has-ta disponer de versiones en español,previstas para después de lasNavidades).

Nuevas ediciones para el nue-vo Visual Studio 2005

Con Visual Studio 2005 no solo pre-sentamos una versión actualizada y mejo-rada del producto, además ampliamos elalcance del producto, incorporando nue-vas líneas para ofrecer soluciones paratodos los perfiles de usuarios.

Visual Studio 2005 Express

Así, aparece Visual Studio 2005Express, compuesta por cinco productos(los cuatro lenguajes de programaciónMicrosoft –Visual Basic 2005 Express,Visual C++ 2005 Express, Visual C# 2005

Express y Visual J# 2005 Express– másVisual Web Developer 2005Express), orientados a los desarrolla-dores noveles, estudiantes y aficionadosque desean dar sus primeros pasos en elmundo de la programación. Dichos pro-ductos Express estarán disponibles parasu descarga de forma gratuita por tiem-po indefinido, para hacer más accesiblela plataforma .NET a los futuros pro-fesionales del sector.

Visual Studio 2005 Standard

Para aquellos desarrolladores queaún utilizan versiones pre-.NET así

como para los profesionales del desa-rrollo Web tendremos Visual Studio2005 Standard, el cual incluye opcio-nes como el desarrollo para dispositi-vos móviles o el soporte nativo de 64bits, y que permite además extenderel entorno de desarrollo con más de300 herramientas de otros fabricantesmiembros del programa de Partnersde Visual Studio (VSIP).

Visual Studio 2005 Professional

Llegamos así a la versión que comosu nombre indica, Visual Studio 2005Professional, está dirigida a los profe-sionales del desarrollo trabajando ensolitario o en pequeños equipos. Nosolo ofrece importantes mejoras encuanto a sus características (Editar yContinuar, empaquetamiento y publi-cación automáticas con ClickOnce,apariencia consistente de las aplica-

dotN

etM

anía

<<

9

dnm.plataforma.net

Me alegro de tener la ocasión de poderdirigirme a los lectores de dotNetManíacoincidiendo con un momento tan especialcomo es el anuncio de Visual Studio 2005, lanueva y mejorada versión de nuestro con-junto de herramientas de desarrollo.

Atrás quedaron las primeras versionesde Visual Studio, una evolución que se havenido realizando sobre un firme y cons-tante propósito, el de ofrecer a los desarro-lladores una solución flexible y dinámica queles permita potenciar su productividad y efi-ciencia en las labores de desarrollo y testeodel software.

Este importante lanzamiento se produ-ce conjuntamente con el anuncio de SQLServer 2005, la esperada versión de nuestrogestor de bases de datos y herramienta debusiness intelligence, y BizTalk Server 2006,un completo e integrado ecosistema de pro-

ductos que marcará, sin duda, un antes y un después en la forma de trabajo de losdesarrolladores. Esperamos satisfacer las expectativas que, tanto la comunidad téc-nica como los fieles lectores de dotNetManía, han puesto en nosotros.

Rosa Mª GarcíaConsejera Delegada de

Microsoft Ibérica

dnm.plataforma.net

Page 10: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

ciones y sitios Web con las plantillasde Páginas Maestras, etc); además seha mejora sustancialmente el rendi-miento. Para los interesados en crearsoluciones sobre Excel, Word eInfoPath disponemos de Visual Studio2005 Tools para Office System, un aña-dido que se instala sobre Visual Studioy permite trabajar con Visual Basic oC# beneficiándose de IntelliSense y elresto de sus características a la vez quese tiene acceso al modelo de objetosde los productos Office.

Visual Studio 2005 Team System

Y por fin nos encontramos con lagran novedad en este lanzamiento, laentrada de Microsoft en el mercado delas herramientas de ciclo de vida delsoftware con Visual Studio 2005 TeamSystem. Diseñado para el trabajo enequipo, y puesto que las funciones den-tro de los equipos de desarrollo se hanespecializado, se ofrecen diferentes“sabores” según el puesto que sedesempeña, disponiendo de una edi-ción para desarrolladores, otra paraarquitectos y otra para probadores desoftware. También es posible disponerde las características de las tres edicio-nes mediante el paquete Team Suite.Estas ediciones trabajan en conjuntocon el repositorio de versiones y por-tal de proyecto, en un modelo clienteservidor de nivel empresarial, Visual

Studio 2005 Team Foundation Server. Ypara las empresas que deseen incre-mentar la carga de usuarios en las prue-bas que realizan sobre sus aplicaciones,se dispone de Visual Studio 2005 TestLoad Agent.

Y por supuesto, Team System serámuy competitivo en precio respecto asoluciones de ciclo de vida de otrosfabricantes, acercando y popularizan-do de este modo su utilización enorganizaciones dedicadas al desarro-llo en todos los segmentos de merca-do, no solo grandes empresas sinotambién pequeñas y medianas.

Nuevas Suscripciones MSDN

Todas las ediciones Team System seofrecen en conjunto con la nuevaSuscripción MSDN Premium, que vienea sustituir a la actual MSDN Universal,de forma que el usuario siempre esté aldía y disponga de todos los recursos quepueda necesitar. Por otro lado, VisualStudio Professional además de en solita-rio podrá adquirirse con SuscripciónMSDN Premium o con SuscripciónMSDN Professional; mientras que laSuscripción MSDN Enterprise desapare-ce y deja de comercializarse.

ConclusiónEn definitiva, creemos sincera-

mente que Visual Studio 2005 es elmejor entorno de desarrollo creadohasta el momento y con la ampliavariedad de versiones ofrecidas esta-mos seguros de que todos los desa-rrolladores, desde los noveles hasta losprofesionales con amplia experiencia,encontrarán la solución a sus necesi-

dades. Como parte del compromisode innovación y mejora que represen-ta Visual Studio 2005, esperamos queayude a todos nuestros clientes ysocios de negocio a mejorar su pro-ductividad y competitividad y a alcan-zar el éxito.

Más información en www.micro-soft.com/spanish/msdn/vs2005.

dotN

etM

anía

<<

10

dnm.plataforma.net<<

Con Visual Studio 2005los desarrolladores podrán

• Obtener una mayor productividad mediante herramientas integradasdel ciclo de vida de desarrollo que reducen la complejidad de crear solu-ciones orientadas a servicios y permiten a las organizaciones comuni-carse y colaborar más eficazmente.

• Disponer de un mayor conocimiento de los procesos de desarro-llo utilizando Visual Studio 2005 Team System, permitiendo a losequipos de desarrollo analizar sus procesos software, tomar mejo-res decisiones de desarrollo y mejorar la previsión del ciclo de vidade desarrollo del software .

• Trabajar sobre una plataforma de aplicaciones segura, de alto rendi-miento y fiable con el .NET Framework 2.0 y Visual Studio 2005.

[ ]

Page 11: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-
Page 12: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Entrevista a Brian KellerProgram Manager de Visual Studio 2005

Además de su posición en el equipo de desarrollo de Visual Studio 2005,Brian Kellerse mostró especialmente hábil en un paquete de demos con las que contribuyó a lakeynote inicial deAndrew Lees,en el pasado Tech-Ed 2005 de Ámsterdam.Amablemente,aceptó responder a nuestras preguntas para dotNetManía.

que nos hicieras un resumen sobrelas distintas versiones de Visual Studio 2005, inclu-yendo las ediciones Express, en términos de licencias yprecios, o sea, en cuanto a su disponibilidad.

Visual Studio Express está pensado para estudian-tes, aficionados y personas que empiezan con desarro-llos, sin experiencia previa. Queríamos poner a dispo-sición de este colectivo una herramienta sencilla, inme-diata, con todo lo que se necesita para empezar a hacerdesarrollos reales. Por eso incluye muchos tutoriales,ejemplos, acceso a recursos comunitarios, etc. En tér-minos de funcionalidad, no existe ninguna limitación,salvo algunas herramientas de alto costo como las pen-sadas para desarrollo en grupo, plantillas empresaria-les, aplicaciones para dispositivos móviles, etc. Peropuede desarrollarse cualquier tipo de aplicación median-te las ediciones Express, aunque no todas las herra-mientas de soporte estén presentes.

Respecto a las licencias, tampoco existen limitacio-nes importantes. Se pueden construir aplicaciones paracualquiera, distribuirlas como se necesite, comerciali-zarlas, etc. Y respecto a los precios, creemos que son muycompetitivos. Por ejemplo, las versiones Express, estánvaloradas alrededor de los 49$, y SQL Server Express esgratuito y va a continuar en esa categoría, y pensamosque es un gran valor añadido.

A propósito de estos comentarios, en la revista hemostenido ocasión de hablar con otros responsables de VisualStudio, y hemos observado la presencia común del tér-mino “entusiasta”. ¿Puedes explicarnos exactamente quéentendéis por entusiasta, y sobre todo, cuántos de ellostenéis “censados”, como usuarios reales y/o potenciales?

Es curioso que lo comentes, porque recientementehemos ponderado el número de usuarios que pensamosque caen dentro de las categorías de aficionados o entu-siastas, y la cifra sube hasta aproximadamente los 18

millones, en todo el mundo. Son desarrolladores no pro-fesionales, con distintos perfiles: desde el usuario avan-zado, el principiante, el administrador de sistemas quequiere tener capacidades extendidas de administraciónmediante programas, etc.

Has mencionado un nuevo elemento dentro delmenú principal de Visual Studio, que tuve ocasión decomprobar desde las primeras betas, y que está relacio-nado con la Comunidad (de hecho, se llama así).¿Significa eso una voluntad por parte de Microsoft paraabrir lo más posible los recursos comunitarios de desa-rrolladores? ¿Vais a continuar con esa línea?

Hemos estado pensando cómo potenciar los recur-sos comunitarios vinculados con las herramientas dedesarrollo, y hemos contactado con un gran número departners para conseguir que esa idea se pudiera expre-sar de forma clara en el nuevo Visual Studio 2005. Esonos llevó a incluir esas nuevas opciones e incluso otras,como los llamados kits de inicio, que pueden verse en lapágina principal de todos las ediciones de Visual Studio,incluyendo las Express.

¿Tiene eso algo que ver con una iniciativa llamadaCoding for fun?

En efecto. Es una idea con soporte Web, que tienepor objeto suministrar contenidos interesantes en tér-minos de artículos, código fuente, etc., para que la gen-te lo pueda incluir en sus propios proyectos. Ahora (pri-meros de julio/05) ya tenemos una treintena de artícu-los disponibles y pensamos ir aumentando a un ritmo deunos dos o tres por semana. Queremos que se manten-ga vivo, añadiendo además, video webcasts, similares a losque publica Channel9.

Hablemos acerca de lenguajes. ¿Piensas que el len-guaje J# ha evolucionado en su aceptación en la formaesperada por Microsoft? ¿Cuáles son las estadísticas deuso actuales?

Marino Posadas

dnm.directo.entrevistas

Marino Posadas esasesor técnico y

redactor dedotNetManía, MVP de

C# y formador deAlhambra-Eidos

<< Lo primero, me gustaría

Page 13: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Al principio se trataba de un lengua-je estratégico, en muchas formas, ya quepermitía una migración sencilla para losusuarios de Java. Ahí, pensamos que hasido tremendamente exitoso, y ha cum-plido sobradamente las expectativas. Otrafuente muy importante de programado-res de J# ha sido la comunidad de ISV,donde la migración a .NET se ha vistomuy beneficiada por la existencia de J#.

En mi experiencia docente, he podi-do comprobar que, mientras muchosorganismos oficiales, pymes, y princi-piantes prefieren Visual Basic, en el mun-do universitario, el lenguaje de adopciónes claramente C#, debido a sus caracte-rísticas sintácticas, fundamentalmente.¿Esa situación perjudica la promoción deJ# como lenguaje?

Nosotros tenemos claro cuál es lasituación del lenguaje en la comunidad eneste momento. Como dije, ha cumplidoy cumple su función y expectativas y segui-rá estando ahí, dentro de esos términos,por decirlo así. Aunque entendemos quepara la mayoría de la comunidad de desa-rrolladores los lenguajes más atractivossean Visual Basic y C#, por supuesto.

Y, respecto a estos dos últimos, ¿pien-sas que todavía Visual Basic es el lengua-je más popular, o está empezando a cam-biar la tendencia?

Eso es interesante de analizar, porquesi piensas en todas las versiones de VisualBasic, como VBA, VBScript, etc., enton-ces Visual Basic es, sin duda, el lenguajemás popular. Pero si sólo consideramos loslenguajes .NET, creemos que la tenden-cia está empezando a igualarse entreambos. Aunque no era así en un principio.

Respecto a las nuevas característicasde los lenguajes, parece que una de las másesperadas por los desarrolladores era la de“Editar y continuar”, al estilo de las ver-siones de VB anteriores a .NET. Sé queVisual Basic 2005 y C# 2.0 van a incluiresa característica, pero hay un temor enlos beta-testers respecto a la presencia derefactoring en Visual Basic, porque lasbetas actuales sólo la incluyen para C#.¿Qué puedes comentar al respecto?

Pues entonces, tengo un mensaje tran-quilizador para vuestros lectores, ya que,aunque no está presente en la Beta 2, síque lo va a estar en la versión final. Lo quesucede es que hemos llegado a un acuer-do con otra compañía (Developer Express),

que es quien está desarrollando esa carac-terística. Es una de las herramientas quese consideran como recursos añadidos y,a veces, el canal de distribución, o loscalendarios pactados no permiten queciertos elementos aparezcan en las betas,aunque luego estén en el producto final.De hecho también va a figurar en todaslas versiones Express de los productos.

Aunque ADO.NET no parece habercambiado excesivamente desde la versiónanterior, ASP.NET sí que ha sufrido unmontón de cambios, nuevos modelos decompilación, edición, desarrollo y distri-bución, más de 60 controles de servidorañadidos, etc. ¿Supone eso que ASP.NETestaba inmaduro respecto a ADO.NET?

Lo que pasa, a veces, es que lleva tiem-po averiguar cómo la gente va a utilizaruna tecnología. El equipo de desarrollode ASP.NET es uno de los mejores deMicrosoft en términos de mirar qué es loque están haciendo los clientes, analizar-lo y determinar cuáles son las necesida-des. De esa forma, hemos sido capaces dereducir el código necesario en alrededorde un 70% para esta versión. Cada ver-sión nueva es mejor que la anterior, por-que aprende de los errores cometidos y velas carencias con más claridad.

Aunque no soy muy aficionado a laspreguntas tópicas, a veces parecen inevita-bles las comparativas. ¿Podrías citar las que–para ti– son las 3 mejores característicasde la nueva versión, respecto a cuatro pun-tos concretos: Windows, ASP.NET,ADO.NET y aplicaciones para móviles?

Para Windows, la distribución Click-Once; en ASP.NET, el número de nuevoscontroles, junto a los kits de inicio; en

ADO.NET, quizás la capacidad de devol-ver objetos DataTable como valor de retor-no de un servicio Web; y respecto a lasaplicaciones para dispositivos móviles, megustan especialmente el nuevo emulador,que es capaz de funcionar en un VirtualPC, y el soporte de Platform/Invoke parasoportar mensajes SMS.

Para concluir, ¿puedes decirnos algoacerca de las implicaciones en la adopciónpor parte de los equipos de desarrollo delnuevo Visual Studio Team System? Porejemplo, no me parece que muchos deesos entusiastas que citábamos antes vayana ir por ese camino inmediatamente, debi-do a la curva de aprendizaje…

Es cierto, yo tampoco lo creo. Piensoque es una herramienta para equipos dedesarrollo más experimentados, y mayo-res en volumen que el programador indi-vidual. Entre otras cosas, porque requie-re conocimientos del ciclo de vida correc-to de las aplicaciones, de las que llamamosbest practices, etc. Somos conscientes deesto, así como de que existe un enormetrabajo que hacer todavía para las próxi-mas versiones en términos de facilidad deuso, de características de instalación(recordemos que en la Beta 1 se requerí-an 3 máquinas distintas para su instala-ción, aunque en esta Beta 2, ya sólo hacefalta una), etc.

Pero pienso que para el momentoen que el producto esté oficialmente enla calle, vamos a disponer de una exce-lente herramienta, muy fácil de usar,considerando las capacidades que tiene,y que va a suponer una herramienta deun valor añadido fantástico para nues-tros clientes.

dotN

etM

anía

<<

13

dnm.directo.entrevistas<<

Marino Posadas y Brian Keller

Page 14: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Novedades en la seguridad enVisual Studio 2005

.NET es una plataforma que nació con la seguridad “en mente”, por su propio diseño.En la ejecución del código (Code Access Security o CAS), en los metadatos que cadaensamblado especifica de cara a garantizar restricciones en la ejecución y en un mode-lo de especificación de políticas de ejecución muy configurable.Esta nueva versión con-tiene novedades y extiende otros conceptos ya presentes, dando a la plataforma untono de solidez único hasta ahora.

categorías las nuevas caracte-rísticas de seguridad, dependiendo del tipo de códi-go a analizar: nativo o administrado. No vamos a tocaraquí las propias del código nativo, pero sí recordarque, para programadores de C++, la nueva herra-mienta de análisis de código que se incluye en VisualStudio Team System, posee un montón de atracti-vas novedades en ese sentido. Por una parte, vamosa comentar brevemente la seguridad del propioFramework 2.0. Después, veremos algunos cambiosen Visual Studio 2005.

Seguridad en .NET Framework 2.0Vamos a resaltar algunas de las novedades en los

espacios de nombres de .NET Framework 2.0. Laprimera que nos llamó la atención, es la claseSecureString. Se diseñó como parte del espacio denombres System.Security, y no se almacena enmemoria, como la clase string, sino mediante DataProtection API (DPAPI), en un espacio controladopor el sistema. Similares medidas se han tomado enel espacio de nombres System.Diagnostics, dondela clase ProcessStartInfo, dispone de una propie-dad Password, del tipo SecureString. Garantizan queel acceso al contenido de la cadena cifrada sólo pue-da hacerse a través de DPAPI sin accesos alterna-tivos.

Otra clase específica de la seguridad es la poten-te SecurityContext. Permite capturar el contextode seguridad de un subproceso y restaurarlo en otroproceso. Eso incluye los marcadores de subproce-so para CAS, tales como Assert y PermitOnly. Otros

aspectos internos de interés tienen que ver con lapropagación de los símbolos de “impersonation”entre distintas hebras. Ese comportamiento, queno era asumido por .NET anteriormente, ahora sílo es, hasta el punto de poner a disposición del usua-rio los métodos SuppressFlow() y SuppressFlowWindowsIdentity(), con el objeto de poder operaral estilo anterior.

AccessControlDentro del espacio System.Security, el namespa-

ce AccessControl suministra acceso mediante códigoa las ACL (Access Control List) del sistema, no sólo enlectura, sino permitiendo la creación de nuevos obje-tos, la toma de control sobre objetos existentes, y laposibilidad de convertir cadenas SDDL (SecurityDescriptor Description Language) en descriptores bina-rios y viceversa. De hecho, todos los objetos en losque la seguridad era importante, disponen desde estaversión de dos nuevos métodos: GetAccessControl()y SetAccessControl().

Muchos otros aspectos que no podemos destacarpor la falta de espacio: la clase NegotiateStream, per-teneciente a System.Net.Security, permite ahora cre-ar canales seguros de comunicación para facilitar laimplementación de Kerberos o SSL en las aplicacio-nes. En el apartado de la criptografía, las nuevas cla-ses ProtectedData y ProtectedMemory hacen uso direc-to de DPAPI, y existen novedades como la no nece-sidad de CAPICOM (el API de criptografía basadoen un módulo de Interop), para manejar certificados ymensajes.

Marino Posadas

dnm.plataforma.net

Marino Posadas esasesor técnico y

redactor dedotNetManía, MVP de

C# y formador deAlhambra-Eidos

<< Podríamos dividir en dos

Page 15: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Otras primicias agradables, lasencontramos en los espacios de nom-bres System.Diagnostics (donde la cla-se Process permite una llamada direc-ta a CreateProcessWithLogonW, sinnecesidad de Platform/Invoke), o enSystem.DirectoryServices y System.Web,donde podemos usar DPAPI para cifrarsecciones de ficheros Web.Config, concódigo de este tipo:

Y además, se han añadido muchasnuevas clases y propiedades dentro deCAS (como una nueva clase de eviden-cia que nos indica si un ensamblado hasido cargado desde GAC), así comootras novedades para el manejo de la dis-tribución ClickOnce. En un próximo artí-culo profundizaremos algo más en estascaracterísticas.

Seguridad en el IDE

FXCop: Una herramienta “de obli-gado cumplimiento”

FxCop se había estado usandocomo herramienta independiente para

comprobar hasta qué punto un códi-go cumplía con los principios de dise-ño recomendados. A partir de ahora,se integra en las ventanas de configu-ración de propiedades del proyecto,donde, además, podemos observar unasolapa especial “Security”, dedicadafundamentalmente a la distribuciónClickOnce y la forma de garantizar suajuste fino.

Como vemos, si la aplicación sólodispone de permiso Partial Trust, pode-

mos establecer exactamente qué tipo depermisos se van a conceder en funciónde las zonas de ejecución que establecela directiva CAS (default, LocalIntranet,Internet, etc.)

Otra de las mejoras a destacar tieneque ver con la edición de código. Si hemosestablecido una restricción a partir de laventana anterior (por ejemplo, si hemosexcluido el permiso FileIOPermission), alintentar editar incluyendo la clase Filedelespacio de nombres System.IO, casi todoslos métodos de la clase aparecen deshabi-litados, de acuerdo con la directiva esta-blecida, si bien esta característica sólo estápresente en Visual Basic.

A eso hay que subrayar la capaci-dad de ejecutar código con mínimosprivilegios (una de las recomendacio-nes para la escritura de código segu-

ro que encontramosen la mayoría demanuales), la informa-ción extendida deerrores de seguridad,y las nuevas capacida-des de testing de apli-caciones ofrecidas porVisual Studio TeamSystem, incluyendo lacreación de tests unita-rios, de stress, y un lar-go etc.

En suma, el pro-ducto ha sido revisado“con la seguridad” en laproa, y, nuevos análisis,nos irán descubriendo

cómo esa seguridad aparece por doquieren toda la plataforma.

dotN

etM

anía

<<

15

dnm.plataforma.net<<

//fichero Web.Config<configuration><appSettings><add key='pwd' value='secreto'/>

</appSettings></configuration>

// manejo de Web.configstring configFilePath = null;Configuration config =Configuration.GetExeConfiguration(path,ConfigurationUserLevel.None);config.AppSettings.ProtectSection(ProtectedConfiguration.DataProtectionProviderName);config.Update();

//fichero de salida<configuration><protectedData><protectedDataSections><add name="appSettings" provider="DataProtectionConfigurationProvider" />

</protectedDataSections></protectedData><appSettings><EncryptedData><CipherData><CipherValue>AQAAA...</CipherValue>

</CipherData></EncryptedData>

</appSettings></configuration>

Figura 1. Solapa de “Seguridad” en la “Ventana de Propiedades” de “Proyecto”

Figura 2

Fuente 1

Page 16: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

La transición de 32 a 64 bits es tan inminente e ine-vitable como fue en su momento la de 16 a 32 bits, aun-que afortunadamente ya podemos anticipar que no serátan compleja, sobre todo para aplicaciones desarrolla-das con código manejado.

Las ventajas de los 64 bits son varias: desde poderdireccionar hasta 8 TB (sí, ¡TeraBytes!) frente a losclásicos 3 GB de los procesadores de 32 bits, inclu-so permitir escalar verticalmente nuestro servidorhasta nuevos límites. Un ejemplo: este incrementode memoria permite al sistema operativo pasar deun máximo de 115.000 conexiones TCP/IP simul-táneas a más de 1.000.000 en Windows Server 2003.En un escenario de un servidor Web con ASP.NET,el cambio a 64 bits no supondría sólo ventajas paranuestra aplicación en cuanto al uso de memoria,sino sobre todo en el rendimiento y escalabilidadde nuestra Web.

Dentro de los sistemas de 64 bits podemos dife-renciar dos arquitecturas completamente diferentes,cada una con sus ventajas e inconvenientes, pero sobretodo destinadas a dos escenarios claramente diferen-ciados. Es fundamental conocer cuáles son nuestrosobjetivos y prioridades antes de decantarnos por una uotra arquitectura.

Por un lado nos podemos encontrar con los siste-mas basados en procesadores extendidos, los conocidoscomo x64, basados en la tecnología EM64T (ExtendedMemory 64 Technology). Ejemplos de éstos son los siste-mas basados en Intel Xeon, Pentium 4 x64 o AMD Athlon

64 entre otros. Son procesadores que mantienen sunúcleo de 32 bits pero incorporan un conjunto de ins-trucciones extendidas que le permiten ejecutar códigode 64 bits. Estos sistemas nos permiten acceder a lasventajas de los 64 bits pero manteniendo la habilidadde ejecutar código 32 bits de forma nativa con el ren-dimiento habitual.

Por otro lado podremos encontrar procesadoresnativos de 64 bits, los conocidos como IPF (ItaniumPentium Family) o IA64 y basados en la tecnología EPIC(Explicit Parallel Instruction Computing). Son procesado-res con arquitectura completamente diferente a los x86o x64, mucho más potentes y capaces de ejecutar hasta6 instrucciones en paralelo. El inconveniente de estosprocesadores es que no pueden ejecutar código de 32bits de forma nativa, así que esta ejecución de códigode 32 bits se realiza a nivel del sistema operativo median-te un subsistema de emulación conocido como WoW64(Windows 32 on Windows 64). Por desgracia, el impac-to de este subsistema de emulación en el rendimientoes bastante elevado.

Programando para 64 bits con.NET Framework 2.0

Por primera vez,y con la reciente salida de la versión 2005 de Visual Studio,Microsofttiene una bonita historia que contar en torno a los 64 bits. Los compiladores parael .NET Framework 2.0 son los primeros capaces de generar código MSIL opti-mizado para plataformas de 64 bits, tanto para procesadores Itanium como losbasados en tecnología extendida x64.

<<

José Murillo

dnm.plataforma.net

La arquitectura de los 64 bits

Jose MurilloEs ISV Developer Advisor en la

División de Desarrollo yPlataforma (DPE) de Microsoft

Ibérica. Su objetivo es ayudar a losfabricantes de software (ISVs) enla implementación de tecnologíasMicrosoft, especialmente sobre la

plataforma de desarrollo .NET.

Los procesadores Itanium están diseñados principalmente para ejecutarcódigo nativo en 64 bits, no de 32 bits

Page 17: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Los procesadores con tecnología extendida x64 estándestinados principalmente a estaciones de trabajo congrandes necesidades de rendimiento, direccionamientode memoria, o precisión en operaciones de coma flo-tante, como por ejemplo aplicaciones de diseño gráficoCAD, de cálculos de ingeniería, o simplemente para entu-siastas de videojuegos o sistemas multimedia.

En el caso de los procesadores IA64 o Itanium, suuso está principalmente destinado a servidores de bac-kend como bases de datos (existe una versión de SQLServer 2000 y 2005 para IA64), servidores de compo-nentes de 64 bits, o servidores de aplicaciones Web para64 bits. Como vemos, el mensaje es claro. Los procesa-dores Itanium están diseñados principalmente para eje-cutar código nativo en 64 bits, no de 32 bits.

Generación de código para 64 bits conVisual Studio 2005

El IDE de Visual Studio 2005 sigue siendo una apli-cación de 32 bits, aunque por primera vez soportada enWoW64. Esto quiere decir que ya podemos instalarlodirectamente en máquinas Itanium, aunque mi reco-mendación personal es no hacerlo y seguir desarrollan-do sobre estaciones de trabajo de 32 bits. En este caso,el modelo de desarrollo recomendado es mediante des-pliegues y depuración remota sobre la máquina Itanium.De todas formas, aunque despleguemos el IDE en la mis-ma máquina, si intentamos depurar código nativo de 64bits, nos encontraremos con el IDE ejecutando bajo 32bits y la aplicación a depurar en 64 bits, con lo cual inter-namente se utilizará depuración remota aún dentro deuna misma máquina, ya que código de 32 y 64 bits nopueden convivir en un mismo proceso.

Lo que sí cambian son los compiladores. Tanto enC# como en Visual Basic 2005 podemos generar códi-go manejado para 64 bits. ¿Pero no habíamos queda-do en que el código MSIL era código intermedio inde-pendiente de la plataforma? ¿por qué tenemos enton-ces que volver a recompilar para 64 bits? Efectivamenteel código MSIL que generamos con la configuraciónpor defecto (anyCPU) es agnóstico a la plataforma. Estecódigo puede ser ejecutado en cualquier tipo de pro-cesador, ya que el JITter generará código nativo sobrela marcha. En el caso de máquinas de 64 bits, se ejecu-

tará sobre el Framework 2.0 para 64 bits, con lo cual elrendimiento será mayor. Sin embargo, esto ya era posi-ble con el código generado mediante Visual Studio2003, aunque era ejecutado sobre una versión delFramework 1.0 o 1.1 corriendo en 32 bits bajo WoW64,con lo cual el rendimiento era incluso inferior que enmáquinas nativas de 32 bits.

La gran novedad es la posibilidad que tenemos aho-ra con Visual Studio 2005 de especificar como target enla configuración de compilación tanto procesadoresItanium (IA64) como Extendidos (x64). En este caso, elcódigo MSIL generado estará optimizado para que elJITter de dichas plataformas sea capaz de generar códi-go nativo optimizado para ese procesador, por ejemplohaciendo así uso de las nuevas capacidades de Itaniumpara ejecutar instrucciones simultáneamente. El incre-mento del rendimiento de nuestra aplicación en estoscasos es notable.

Así pues y con todo lo visto, podemos decir que enla mayoría de los casos, portar nuestras aplicaciones .NETa 64 bits consiste simplemente en cambiar el target de laconfiguración de compilación y recompilar.

Obviamente el escenario se complica si tenemosdependencias de código de 32 bits, tanto en componen-tes COM accedidos mediante COM Interop, como enDLL nativas referenciadas mediante Platform Invoke. Enel caso de que tengamos acceso al código de estos com-ponentes, la recomendación es recompilarlos tambiénen 64 bits.

En el caso de que no tengamos acceso al código fuen-te o podamos recompilar los componentes en 64 bits, ten-dremos que exponerlos a nuestro proceso manejado de64 bits mediante un proceso wrapper de 32 bits y realizarla comunicación mediante mecanismo IPC (InterProcessCommunication). Si nuestro componente es COM, bas-tará con registrarlo en COM+ como servidor, así será lapropia plataforma de COM+ quien nos lo exponga a nues-tro código manejado mediante un proceso de 32 bits. Siel componente es una DLL nativa, por ejemplo en C oC++, tendremos que hacer un wrapper nosotros mismos,por ejemplo mediante un Server ATL que lo encapsule yexponga el mismo contrato mapeado.

¡Animaos! Sólo tenéis que cambiar una opción dela configuración de Visual Studio y recompilar para 64bits. Ahora ya sólo nos falta una máquina de 64 bits parapoder ejecutarlo :-).

dotN

etM

anía

<<

17

dnm.plataforma.net<<

...portar nuestras aplicaciones .NET a 64 bits consiste simplemente en cambiar el target de la

configuración de compilación y recompilar

Tanto en C# como en Visual Basic 2005podemos generar código manejado

para 64 bits

Page 18: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Novedades para desarrollo Web enASP.NET 2.0 y Visual Web Developer 2005

Si bien ASP.NET 1.x era un marco de desarrollo Web excelente, lo cierto es quela nueva versión 2.0 es todavía mucho mejor y viene con gran cantidad de carac-terísticas nuevas. Sólo por alguna de ellas ya merece la pena actualizarse.El entor-no de Visual Studio 2005 también se ha mejorado notablemente.Vamos a cono-cer todas estas interesantes mejoras y añadidos.

<< beta de la plataforma .NET “asomó la cabe-za” allá por el verano del año 2000 (¡ya han pasado másde 5 años, parece mentira!) todos los programadorescontuvimos la respiración. Aquello era todo tan nuevoy diferente de lo que conocíamos en el mundo Microsoftque suponía una amenaza, pues había que aprenderlotodo desde cero de nuevo si realmente la cosa iba enserio. Por fortuna en cuanto te metías un poquito enello veías que las ventajas sobrepasaban con creces a lasdificultades y que .NET iba a hacernos la vida más fácil.De todas las áreas abarcadas por .NET, la más espec-tacular y novedosa era, sin duda, la referida al desarro-llo de aplicaciones Web. La diferencia entre ASP.NET1.x y cualquier otro marco de desarrollo Web conoci-do por entonces era simplemente abismal: controles,viewstate, postback, enlace a datos, compilación, etc, etc.Combinado con Visual Studio y todas sus herramien-tas gráficas, ASP.NET ofrecía un poder sin preceden-tes para crear aplicaciones HTTP.

Aunque ASP.NET 1.x es espectacular y pareceque las mejoras siempre podrán ser pocas, lo ciertoes que la versión 2.0 del marco de desarrollo vuelvea sorprendernos gratamente. Los chicos de Microsoftno se han limitado a añadir unas cuantas cosillas decompromiso. La 2.0 trae tantas novedades que esdifícil elegir por dónde empezar. De todos modosconviene destacar un par de hechos importantes res-pecto a esta nueva versión:

• Según estimaciones de Microsoft la nueva ver-sión de ASP.NET permite reducir las líneas decódigo que es necesario escribir en un 70% enmuchos escenarios, sobre todo en los que hacenuso intensivo de enlazado a datos.

• Los nuevos controles Web incrementan la pro-ductividad de forma espectacular tanto en tra-tamiento y visualización de datos como encuestiones relativas a seguridad.

Dicho esto vamos a conocer las novedades másimportantes. Empezaremos por las menos obviaspero aún así significativas, e iremos viendo las másespectaculares al final para mantener así la tensióndramática ;-)

Nuevo modelo de compilación y menoscódigo

Si abrimos una página ASPX y su correspondientearchivo de código (.vb o .cs) en ASP.NET 1.x vere-mos mucho código. Para empezar, todos los con-troles de la página se declaran como miembros de laclase que la representa y existe una parte de iniciali-zación con bastante código. Además el archivo .ASPXutiliza lo que ha dado en llamar Code-Behind pararelacionar el código con la interfaz de usuario, yambas debían estar sincronizadas en cuanto a susmiembros públicos (los mismos controles declara-dos) para funcionar.

La nueva versión utiliza mucho menos código.Para ello emplea un nuevo modelo de compilacióny de relación entre una página ASPX y su código aso-ciado, que saca partido a una de las nuevas caracte-rísticas de los lenguajes de la plataforma: las clasesparciales. La característica de clases parciales per-mite dividir el código que define a una clase en diver-sos archivos en lugar de obligarnos como hasta aho-

Cuando la primera

José M.Alarcón

dnm.asp.net

José Manuel Alarcón es redactor de dotNetManía.

Es ingeniero industrial yespecialista en consultoría de

empresa.Ha escrito varios libros,y ha publicado más de

doscientos artículos sobreinformática e ingeniería en

revistas especializadas.Visita sublog en www.jasoft.org.

Page 19: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

ra a mantener todo lo relativo a una cla-se dentro del mismo lugar. Esta carac-terística a simple vista puede parecer unanimiedad, pero realmente tiene graninterés ya que permite cosas comorepartir el trabajo de una clase entrevarios programadores, o característicascomo el nuevo modelo de soporte decódigo que mencionamos.

En las páginas ASPX de la versión2.0 hay una directiva Page análoga a lasiguiente:

Si nos fijamos, ahora ya no se uti-liza el atributo CodeBehind que apare-cía en esta directiva en las páginas dela versión 1.x. En su lugar se utiliza elatributo Codefile que indica tambiénen qué archivo está la funcionalidadasociada a esta interfaz de usuario. Siindican lo mismo: ¿a qué se debe estecambio?.

Si examinamos el archivo de código(.cs o .vb) asociado a la página, vere-mos que tiene muchas menos líneas yes más sencillo de leer (más “limpio”)que el de versiones anteriores, tal ycomo se observa en la figura 1. En estamisma figura podemos contemplar queincluso la versión de Visual Basic estodavía más limpia que la de C# al noincluir siquiera sentencias Imports mien-tras que la de C# lleva varios using.

Si nos fijamos en la definición de laclase veremos que su definición inclu-

ye la nueva palabra clave Partial (enminúsculas en C#). Es decir, lo quevemos es sólo una parte de la definiciónde la clase que representa la lógica de lapágina. Ello se debe a que, cuandoASP.NET compila la página, primerocompleta automáticamente el código dela clase _Default con otra implementa-ción parcial de ésta en la que se definenlos controles de la página (el código queha desaparecido respecto a las versionesanteriores del entorno). Luego defineuna nueva clase específica para la pági-na que hereda de _Default y es en elladonde inicializa los controles y hace elnexo entre la interfaz y la lógica. Es poreste motivo que ahora los manejadoresde eventos de la clase se declaran conaccesibilidad protected, para que pue-dan utilizarse desde la clase derivada.

A esta novedosaforma de separar (yal mismo tiempounir en tiempo deejecución) la interfazde la lógica hayquien la denominacode-beside, comohomenaje al hastaahora utilizado code-behind de ASP.NET1.x. Sólo este cambioya nos hace la vidamucho más fácil a losprogramadores.

Es muy fácil com-probar este funciona-miento si nos vamos ala carpeta temporal deASP.NET y abrimos

los archivos de código generados de for-ma automática que allí encontraremos.

Ahora Visual Studio nos permite dis-poner del código y la interfaz en el mis-mo archivo si lo deseamos; cosa queantes no era posible desde el entorno.También nos deja mezclar código ypáginas escritas en diferentes lenguajesal mismo tiempo, depurando la aplica-ción en todas ellas a la vez.

Se han definido una serie de carpe-tas en el raíz de las aplicaciones que tie-nen un significado especial. Por ejem-plo, si creamos una carpeta llamadaApp_code, todo archivo de código fuen-te que coloquemos en ella se compilaráautomáticamente y estará disponiblepara su uso desde las páginas del sitioWeb. Se pueden mezclar ahí archivosde código escritos en diferentes len-guajes e incluso, sólo con dejar en ellalos archivos .wsdl y .xsd que definen unservicio Web se crea de forma automá-tica un proxy para poder utilizarlo (aun-que no veremos el código auto-genera-do sí podremos hacer uso de él). Aunquepara esto último ya existe una carpetaespecial llamada App_WebReferences quenos permitirá mantener ordenadas nues-tras referencias a servicios. Comovemos todas estas carpetas llevan elprefijo “App_”. Existen muchas otrascomo App_Data, App_GlobalResources,App_LocalResources o App_Themes.

Con ASP.NET 2.0 se proporcionauna herramienta de precompilación desitios Web (Aspnet_compiler.exe). Graciasa ello podemos precompilar nuestras apli-caciones evitando la compilación dinámi-ca y por tanto reduciendo el tiempo deinicio de ejecución de las mismas (no segeneran las páginas bajo demanda).Además proporciona un modo de pre-compilación especial para distribuir apli-caciones que elimina todo rastro de nues-tro código (incluso del HTML de las pági-

dotN

etM

anía

<<

19

dnm.asp.net<<

@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"<% %>

Según estimaciones de Microsoft la nueva versión deASP.NET permite reducir las líneas de código que es necesario escribir en un 70% en muchos escenarios

Figura 1. Como se puede observar, tanto en Visual Basic como enC# el código de nuestras páginas se ha reducido considerablemente

gracias a la técnica de clases parciales empleada.

Page 20: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

nas ASPX) y nos facilita su despliegue con XCopy pro-tegiendo nuestra propiedad intelectual.

Las nuevas clases de manipulación de archivos deconfiguración mejoran nuestras capacidades para cre-ar asistentes de configuración e instaladores de apli-caciones. Ahora existe también una zona concreta den-tro del archivo de configuración que se usa para alma-cenar cadenas de conexión a bases de datos, facilitan-do su acceso. A esto se une la capacidad de ASP.NET2.0 para cifrar y descifrar automáticamente zonas ente-ras de web.config usando DPAPI, por lo que se mejo-ra mucho la seguridad ante el robo de estos archivos.

Controles nuevos y mejoradosEn general todos los controles Web se han mejora-

do bastante. Ahora devuelven siempre etiquetas com-patibles con el estándar XHTML 1.1. Existe una nuevacaracterística de los controles Web llamada renderiza-ción adaptativa. Ésta permite que dichos controles seadapten a las características del navegador que solicite lapágina de un modo mucho más flexible que los contro-les anteriores. Por ejemplo, un mismo control Web severá correctamente (aunque de forma diferente) en unnavegador de escritorio como Internet Explorer y en unnavegador WAP desde un teléfono móvil si existen direc-tivas de renderizado para ellos. También se pueden usarfiltros dependientes del dispositivo en las propiedadesde los controles indicando valores distintos para dife-rentes dispositivos.

En tiempo de diseño algunos controles muestran unpanel de tareas adjunto que facilita asistentes y accesosdirectos a sus características más importantes (figura 2).Gracias a él se acelera mucho el trabajo.

Existen nuevos controles que mejoran a algunos ante-riores, así como controles desconocidos hasta la fecha.Por ejemplo, el control GridView mejora notablementeal anterior control de rejilla DataGrid y permite hacermás cosas con menos código. De hecho, aunque con-troles anteriores de este tipo siguen estando soportadosni siquiera aparecen en el cuadro de herramientas. Existencontroles nuevos como Wizard, ImageMap o Substitutionentre otros que dotan de nuevas capacidades. Por ejem-

plo el primero de ellos (Wizard) permite la creación visualde asistentes en múltiples pasos e introduce el JavaScripty la lógica de servidor necesarios para conseguir su fun-cionamiento.

Existen categorías enteras de nuevos controles comolos relacionados con la seguridad, los portales persona-lizables o la navegación. Estos últimos ofrecen grandesfacilidades para crear elementos de exploración de laestructura de una Web como menús desplegables, árbo-les o rutas. De los otros hablaremos dentro de un rato.

Los controles de usuario ahora son más potentes,fundamentalmente por dos motivos: su aspecto al utili-zarlos y la facilidad acceder a ellos. Ahora, al emplearlosen alguna página, ya no se muestra un aburrido rectán-gulo gris sin pistas de cómo es el control en realidad.Desde el diseñador de la página veremos el aspecto realdel control de usuario (figura 3) y podremos redimen-sionarlo y trabajar mejor con él.

Para usar un control de usuario desde cualquier pági-

na ASPX antes había que emplear una directiva <%@Register %> en cada una de ellas. No es que se trata-se de un gran problema porque al arrastrar un controlsobre una página, el entorno de Visual Studio lo hacíaautomáticamente, pero sí era un engorro si decidía-mos cambiar la definición del control (había que tocartodas las páginas) o decidíamos sustituirlo por otro(había que retocar o borrar manualmente las directi-vas). En ASP.NET 2.0 se puede definir un control parasu uso directo desde cualquier página registrándolo enweb.config dentro del nodo <system.web>:

InternacionalizaciónOtra gran novedad de ASP.NET 2.0 es la reno-

vada capacidad de internacionalización de aplica-ciones que es más fácil que nunca. Podemos con-seguir que los elementos de la interfaz se adaptenautomáticamente a las preferencias de idioma delnavegador de los usuarios creando archivos derecursos para cada idioma y colocándolos en unacarpeta especial.Figura 2. Los paneles de tareas disponibles en algunos

controles resultan de gran ayuda para trabajar.

dotN

etM

anía

<<

20

dnm.asp.net<<

<pages><controls>

<add tagPrefix="miUC"namespace="MisControles.MiControldeUsuario"/>

</controls></pages>

Figura 3.Ahora los controles de usuario se muestran con suverdadero aspecto en la superficie de diseño de las páginas

por lo que resultan más intuitivos y fáciles de usar.

Page 21: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Existen recursos locales (para páginasconcretas) y globales (utilizables desdecualquier lugar). Las carpetas especialespara ellos son respectivamente App_LocalResources y App_GlobalResources.Los archivos de recursos tienen extensión.resx y poseen un editor propio (figura 4)que permite añadir no sólo cadenas de tex-to, sino iconos, imágenes y sonidos espe-cíficos de cada cultura.

Por ejemplo, para que una páginamipagina.aspxpueda utilizar recursos loca-lizados basta con crear un archivo con elmismo nombre y extensión .resx (seríamipagina.aspx.resx) e incluir en ella losdistintos recursos del idioma por defecto.Para enlazarlo a la interfaz se usa una eti-queta especial (resaltada en negrita en esteejemplo):

Esto hará que dinámicamente a la pro-piedad Text de la etiqueta se le asocie elvalor del recurso de nombre Saludo. Siahora creamos otro archivo de recursoscon una extensión adicional para indicarel idioma (por ejemplo, mipagina.aspx.en-us.resx para el inglés americano) se aso-ciará el valor del idioma correspondientecuando el usuario lo haya elegido comopreferido en su navegador.

Para que esto funcione de formaautomática hay que incluir el nodosiguiente en web.config:

Mejoras en el uso de caracte-rísticas de datos

El nuevo modelo de enlazado a datosdesde la interfaz de usuario se basa en eluso de orígenes de datos en lugar de enla-zar directamente con objetos DataSet. Se

trata de controles que representan cone-xiones con diferentes tipos de orígenes deinformación que van desde bases de datosa objetos de negocio. No disponen de apa-riencia visual pero se arrastran igualmen-te sobre los formularios Web para traba-jar con ellos visualmente y poder usar suspaneles de tareas. Abstraen al programa-dor de las complejidades relacionadas conel manejo de los datos, permitiendo demanera automática seleccionarlos, actua-lizarlos, ordenarlos, paginarlos, etc. Nohace falta volver a escribir códigoADO.NET de bajo nivel más que en cir-cunstancias muy concretas.

ASP.NET 2.0 provee de serie con lossiguientes tipos de orígenes de datos:

A pesar de su nombre, el primero deellos no sólo se enlaza a bases de datosSQL Server sino que lo hace con cual-quier sistema gestor de datos para el queexista un proveedor .NET, comoOracle, MySQL, o mediante un con-trolador OLEDB u ODBC.

Cuando hemos definido un controlde tipo DataSource en una página bas-ta con asignar su nombre en la propie-dad DataSourceID de cualquier controlque se enlace a datos (casi todos) paraque funcione. Así de simple. Comotodos los controles DataSource sopor-tan las mismas interfaces, sólo con cam-biar la asignación del origen de datos

se puede reutilizar la misma página parahacer uso de los datos de cualquier otrafuente.

El comportamiento de los orígenesde datos se puede parametrizar a partirde casi cualquier cosa: desde valores depropiedades de otros controles hasta coo-kies o cabeceras HTTP recibidas y porsupuesto directamente por código.

En el caso de aplicaciones empresa-riales tal vez el origen de datos más inte-resante sea el ObjectDataSource. Exponelos mismos métodos que cualquiera delos otros pero en lugar de acceder direc-tamente a los datos emplea objetos per-sonalizados de capa de negocio parahacerlo.

Plantillas de páginas, temas yskins

Lo más habitual cuando se crea unaaplicación o un sitio Web es que las pági-nas que lo conforman sean todas bastanteparecidas o al menos que existan variosgrupos de páginas similares que sólo varí-an ciertos contenidos entre ellas. EnASP.NET 1.x si queríamos que nuestraspáginas dispusiesen de zonas comunes paraconseguir un aspecto COHERENTEdebíamos recurrir a soluciones caserascomo emplear controles de usuario colo-cados manualmente en todas las páginas

dotN

etM

anía

<<

21

dnm.asp.net<<

<asp:Label ID="Label1" runat="server" Text=" $Resources:Saludo "></asp:Label>

<%%>

<globalization uiCulture="auto"/>

Control DescripciónSqlDataSource Enlaza con cualquier base de datos para la que exista un proveedor

de ADO.NET. AccessDataSource Está especializado en trabajar con bases de datos Microsoft Access.

ObjectDataSource Se enlaza con objetos de negocio y capas personalizadas de acceso adatos.

XmlDataSource Trata datos contenidos en documentos XML. SiteMapDataSource Se enlaza con la jerarquía de clases expuesta por el modelo de

navegación de sitios de ASP.NET 2.0.

Figura 4. El editor de recursos integradode Visual Web Developer.

Los temas de ASP.NET son como hojas de estilo que se aplican a controles Web y sus elementos tienen

una sintaxis prácticamente idéntica a la de los controles cuyo aspecto definen

Page 22: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

(cabeceras, laterales y pies, por ejemplo) o bien crear unaclase propia heredada de Page que cargase ciertos con-troles automáticamente. Ninguna de estas soluciones erarealmente buena o estaba exenta de problemas.

ASP.NET 2.0 proporciona un modelo nativo y cohe-rente para crear plantillas de páginas que se reutilicensin esfuerzo entre las páginas de un sitio Web. A estacaracterística se la denomina Master Pages (MP).

Una Master Page proporciona una forma de defi-nir una estructura e interfaz comunes para un grupode páginas pertenecientes a un mismo sitio Web. Estaestructura común se almacena en un único archivoindependiente. Ello facilita mucho su mantenimien-to puesto que, para actualizar todas las páginas que loutilizan, basta con editar dicho archivo.

Una Master Page es en realidad como una páginaASPX normal que contiene código, elementos HTMLy controles Web de servidor. Sin embargo, poseen unaextensión diferente (.master) y utilizan una directiva<% @ master %> en lugar de una directiva <% @ page %>.Por lo demás se pueden considerar prácticamente equi-valentes. Esto es importante porque significa que ya sabe-mos todo lo necesario para crearlas.

Una página ASPX normal puede derivar su estruc-tura a partir de una MP simplemente añadiendo un atri-buto MasterPageFile a su directiva de página, así:

Que indica el archivo de página principal que seutilizará para su estructura.

Para agregar una Master Page a nuestro proyectosólo hay que elegir el icono “Página Principal” enel diálogo de agregar nuevo elemento, del mismomodo que se añade cualquier otro objeto. Al abriruna MP aparece un diseñador idéntico al de unapágina ASPX normal. Podemos arrastrar sobre susuperficie cualquier control así como editar suHTML de la manera usual. También lleva un archi-vo de código asociado en el que se puede respon-der a sus diversos eventos. La única diferencia apre-ciable a simple vista respecto a una página normales que contiene por defecto un control de tipo

ContentPlaceHolder. La sintaxis de este control esanáloga a la siguiente:

Su única propiedad interesante es precisamentesu identificador ya que este tipo de control se utilizapara marcar las posiciones en las que irán los dife-rentes contenidos de las páginas derivadas dentro dela plantilla de estructura que es una Master Page.

De este modo, cuando una página normal derivede una MP, sólo se podrá introducir código dentro delas zonas definidas por estos comodines de conteni-do, permaneciendo las demás inalterables.

Al editar una página que deriva de una Master Pageaparece el aspecto y estructura de la página principal enel diseñador, pero sólo se pueden tocar las partes corres-pondientes a los comodines de contenido (vea figura 5).

Además las MP se pueden anidar de forma queunas hereden el aspecto y la disposición de otras, aun-que en este caso no se podrán usar directamente des-de el diseñador de Visual Studio .NET 2005.

Gracias a las Master Pages podemos definir unaestructura común para las páginas de nuestra aplica-ción Web. Sin embargo, aún no hemos resuelto todaslas cuestiones sobre el mantenimiento de la interfazque se presentan normalmente. Los controles que aña-damos a las zonas de contenido de nuestras páginastodavía tendrán el aspecto predeterminado. Podemosconfigurar su aspecto estableciendo las propiedades deapariencia del control (como BackColor, Font, etc...). Elproblema que tiene este método es que, si deseamoscambiar por completo la apariencia de estos controles,tendríamos que tocar una por una todas las páginas.Esta no es una opción admisible en cuanto la aplica-ción dispone de más de unas pocas páginas.

Aparte del normal uso de hojas de estilo en cas-cada (CSS) que proporciona HTML, ASP.NET 2.0introduce una interesante novedad que se comple-

NOTA

Aunque normalmente soy partidario de utilizarlos términos en castellano siempre que los haya, eneste caso hago una excepción y empleo siempre eltérmino anglosajón Master Pages (o MP) para refe-rirme a esta característica. El motivo es que estetérmino es el más aceptado y el que veremos conmás frecuencia y además considero que la traduc-ción “Páginas principales” elegida por Microsoft noha sido la más afortunada.

dotN

etM

anía

<<

22

dnm.asp.net<<

@ Page Language="C#" MasterPageFile="~/Articulos.master"...<%

<asp:contentplaceholder id="Contenido" runat="server"></asp:contentplaceholder>[ ]

Figura 5.Al editar una página que hace uso de una Master Page sólo podre-mos modificar aquellas zonas definidas para contenidos en la plantilla.

Page 23: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

menta a la perfección con las Master Pages para sol-ventar el problema del aspecto: los temas y máscarasde controles Web.

La funcionalidad ofrecida por los temas deASP.NET 2.0 se entiende fácilmente si los asemejamoscon las hojas de estilo. Los temas de ASP.NET son comohojas de estilo que se aplican a controles Web y sus ele-mentos tienen una sintaxis prácticamente idéntica a lade los controles cuyo aspecto definen.

Un tema de ASP.NET 2.0 está formado por unoo varios archivos de tipo .skin junto con las imáge-nes y hojas de estilo CSS que éstos utilicen, que sealmacenan dentro de una carpeta con el nombre deltema y que a su vez está contenida en una carpetaespecial de nombre App_Themes. Por ejemplo, la figu-ra 6 muestra una carpeta App_Themes que contiene dostemas y cada uno de ellos a su vez contiene un archi-vo .skin, hojas CSS y gráficos específicos del tema.

Un archivo de máscara contiene definiciones decontroles ASP.NET a los que se le establecen valo-res de propiedades que serán aplicadas de modo auto-mático cuando aparezcan en una página que use eltema al que pertenece la máscara. Por ejemplo, si unarchivo .skin contiene el siguiente código:

Conseguiremos que las páginas que lo apliquen dis-pongan de controles TextBox con el fondo gris claro yel borde punteado de 1 píxel de ancho. Al igual que enlas CSS es posible definir diferentes clases para un mis-mo tipo de control y aplicarlas selectivamente.

Para que una página se adapte automáticamentea un tema definido en la carpeta App_Themes lo únicoque tenemos que hacer es asignar un atributo Themeen la directiva de la página, así:

El segundo atributo indica el tema que se va aaplicar. El entorno de desarrollo nos ofrece de mane-ra automática una lista de temas disponibles al escri-bir este atributo por lo que es muy fácil usarlo. Nadamás establecer el atributo, la página se personalizasiguiendo los dictados de los archivos .skin que hayadefinidos para el tema. Dado que podemos dispo-ner de varios temas se puede asignar uno diferentea cada grupo de páginas de una aplicación según lasnecesidades.

Para no tener que establecer manualmente lostemas y las Master Pages a cada página, es posible defi-nirlos de manera global para un sitio o una carpetade éste por medio de sendas entradas en el archivoweb.config, por lo que se facilita mucho más la tareaen sitios grandes.

Webparts: trocitos de portalesPor si a alguien las nuevas capacidades de perso-

nalización y adaptación automática a plantillas le pare-ciesen poco, con esta nueva revisión de la plataformase incluyen unos nuevos elementos de interfaz de usua-rio realmente impresionantes: los Webparts.

Si usted ha visto en alguna ocasión en funciona-miento Sharepoint Portal Server ya sabe a qué meestoy refiriendo. Sí, en efecto, añadir la capacidad depersonalizar una página visualmente, arrastrando ysoltando sus distintos elementos como en Sharepointes una capacidad estándar que se ha añadido aASP.NET gracias a los Webparts. Y lo mejor es quepodemos crear nuestros propios Webparts y reutili-zarlos en otras aplicaciones ASP.NET así como en elpropio Sharepoint. Aunque la tarea se ha facilitadomucho sigue siendo algo compleja de habilitar yrequiere una buena explicación que abordaremos enun próximo artículo. De momento le dejamos, ami-go lector, con la miel en los labios.

Seguridad,control de acceso y personali-zación

Hasta ahora, si queríamos establecer un sistemade seguridad propio ajeno a las características de IISo el propio sistema operativo empleábamos autenti-cación Forms. En este sistema con ASP.NET 1.x erael propio programador el que debía construir sus pro-pios sistemas de almacenamiento, validación y uso deperfiles de usuario y roles. Ello implicaba normal-mente escribir código de consulta contra bases dedatos, el cual validaría las credenciales de los usua-rios y obtendría los roles de los mismos. Luego secreaban objetos de seguridad (Principal e Identity) asig-nándole estos valores y asociándolos al contexto dela aplicación.

ASP.NET 2.0 nos libera por fin de todo ello yofrece de serie una completa API de gestión de

dotN

etM

anía

<<

23

dnm.asp.net<<

<asp:TextBox runat="server" BackColor="#FFFF80" BorderColor="#C04000"BorderStyle="Dotted" BorderWidth="1px"></asp:TextBox>

@ Page Theme="MiTema" Language="VB" AutoEventWireup="false"CodeFile="Default.aspx.vb" Inherits="_Default"<%

%>

Figura 6. Estructura de ejemplo de la carpeta de temas deuna aplicación. En este caso hay dos temas diferentes (white

y black) cada uno con sus correspondientes archivos dedefinición.

Page 24: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

usuarios que nos evita tener que rein-ventar la rueda en cada aplicación. Laclase Membership proporciona una sen-cilla interfaz de programación paraalmacenar y recuperar informaciónsobre los usuarios de nuestras aplica-ciones. Lo más interesante de todo esque, al igual que muchas otras carac-terísticas nuevas de ASP.NET 2.0, estábasada en un patrón de diseño de pro-veedores, lo que permite cambiar losmétodos de trabajo y almacenamien-to sin tocar el código de la aplicación.Es decir, abstrae la funcionalidad delsoporte físico utilizado para imple-mentarla. Así, por defecto esta APIutiliza SQL Server 2005 para almace-nar toda la información de seguridadde una aplicación. Pero dada su arqui-tectura basada en proveedores pode-mos cambiar el modo de gestión consólo un ajuste en el archivo de confi-guración. Incluso, es posible definirmétodos de gestión de usuarios pro-pios sin modificar el código de nues-tras aplicaciones. Esto nos permitereutilizar infraestructuras de seguri-dad preexistentes que hubiésemos cre-ado para ASP.NET 1.x sin perder eltrabajo.

Membership consta de un conjunto demétodos estáticos (compartidos) parapoder crear, eliminar y validar usuariosentre otras cosas. Así, por ejemplo, paracrear un usuario escribiríamos:

Membership.CreateUser("usuario", "clave")

Y para validarlo sólo hay que usar sumétodo ValidateUser:

Membership.ValidateUser("usuario", "clave")

Que devuelve verdadero o falso enfunción de si las credenciales son o noválidas.

El objeto Roles complementa alanterior para permitir la gestión de losroles de un usuario y, al igual que aquel,está basada en el mismo patrón de pro-veedores. No es necesario utilizar elmismo proveedor para los roles quepara los usuarios. Por ejemplo, se pue-den autenticar usuarios contra una basede datos SQL Server y obtener los rolesdesde el Directorio Activo o las cuen-tas locales.

Por fin, para la parte depersonalización, esto es, man-tener las preferencias de losvisitantes de nuestro sitio sincomplicarnos la vida, se proveede un objeto Profile similar alos anteriores y también basa-do en proveedores.

Se proporciona una com-pleta interfaz de gestión deusuarios, roles y configuración(figura 7) de la que tenemos elcódigo fuente y que nos facili-ta mucho la vida a la hora deestablecer los datos iniciales de un sitioWeb.

Pero tal vez lo más espectacularrelacionado con la seguridad sean losnuevos controles de seguridad (bauti-zados como de “inicio de sesión”).Estos controles nos dan ya hechasmultitud de operaciones comunes deseguridad relacionadas con la interfazde usuario. Por ejemplo, el controlLogin permite disponer de un com-pleto diálogo de autenticación consólo arrastrarlo sobre un formularioWeb. El CreateUserWizard es un asis-tente con varios pasos que permite lacreación automática de nuevos usua-rios. El control LoginView permite per-sonalizar lo que ven los usuarios enfunción de los roles a los que perte-nezcan. Y todavía hay unos cuantosmás. Lo mejor es verlos en funciona-miento. Son realmente útiles.

Todos ellos permiten la personali-zación, tanto parcial por medio depropiedades, como absoluta usandoplantillas. En el caso de los asistentes

tenemos libertad de añadir nuevospasos o modificar los predetermina-

dos a voluntad.En la figura 8 se ve un

control de autenticaciónen pleno proceso de per-sonalización estética.

En resumenEn este artículo he-

mos tratado de llamar laatención sobre lo mássobresaliente que ofrecenASP.NET 2.0 y VisualWeb Developer 2005(que es como se llama laparte de Visual Studiodedicada a desarrollo

Web y que está separada de lo demás porcompleto). Aún siendo un texto bastanteextenso para lo habitual en una revista sólohemos rascado un poco la superficie, y noshemos dejado en el teclado muchas cosaspor comentar. Si bien la mayoría sonpequeños detalles comparado con todo lovisto aquí, todos ellos contribuyen a queel nuevo entorno sea el mejor que hemosvisto nunca, lleno de destellos de calidadpor doquier.

Siga atento a dotNetManía y en lospróximos números iremos desgranandopara usted con mayor detalle cada una deestas novedades. Esperamos que tras leereste texto, como mínimo, esté deseandodescargar la versión gratuita del entorno(Visual Web Developer 2005 Express) paraempezar a experimentar algunas de lascaracterísticas comentadas. Puede leersobre ella en el artículo de SergioVázquez. Ahí podrá encontrar tambiénuna tabla comparativa de versiones.

Siga sintonizándonos.

dotN

etM

anía

<<

24

dnm.asp.net<<

Figura 7.Aspecto de la herramienta de configuración deseguridad que viene con ASP.NET 2.0.

Figura 8.Aspecto del nuevo control de autenticacióntras aplicarle un estilo de los predefinidos que vienen

con Visual Web Developer.

Page 25: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

dotN

etM

anía

<<

25

se crea una aplicación Web es que sedesarrolle y testee en la propia máquina o a la sumoen un servidor de la red local. Todo funciona rápidoy fluido, con lo que parece que eso de gastar tiempoy dinero en mejorar el rendimiento de las páginas,es algo reservado a esos pocos sitios de la red a losque acudimos todos en masa (periódicos online,macrotiendas de libros, dotnetmania.com :-)...).

El problema llega cuando subimos nuestra apli-cación al servidor en producción y vemos que es len-tísima, o incluso que cuando lanzamos eventos al ser-vidor se convierte en algo con usabilidad cero (¡Ojo!las intranets tampoco se libran de estos males).Vamos a ver cómo ahorrarnos un capital en super-servidores, ampliaciones de ancho de banda… usan-do las novedades que nos trae ASP.NET 2.0.

Llamadas fuera de bandaComo viejo desarrollador de aplicaciones desktop

que soy, una de las características que más me impac-tó de ASP.NET, era la de asociar una acción de uncontrol ASPX a un evento en el servidor (por ejem-plo: cambio de selección en un combo), ¡era cómoprogramar una aplicación Windows!

Con el paso del tiempo, uno se da cuenta que no sepuede abusar de dicha práctica, hay que mover todaslas validaciones posibles a métodos Javascript, o paraalgunos eventos, mostrar algún mensaje para que elusuario sepa que algo está en marcha, e incluso haceruna transición a otra página. Si no hacemos esto corre-mos el riesgo de que la aplicación deje de ser “usable”.

Todo esto me parece muy bien, pero ¿por quées tan lento? Enviar una petición a un servidorremoto siempre es lento, comparado con trabajardirectamente en la máquina cliente, y aún más toda-vía si para cada petición que hacemos enviamos lapágina entera, el servidor la procesa de nuevo y sela envía de vuelta al cliente ¿¡Como!?, ¡pero si yoquiero leer un simple dato del servidor! ¿No hayalguna forma de enviar una petición simple sin tenerque ir enviando y recibiendo la página completa?…para eso ASP.NET 2.0 incorpora las llamadas fue-ra de banda (o como dicen en inglés Out of band callso Script callbacks).

Con una llamada fuera de banda, lo que hacemoses enviar una petición al servidor, dejar que el usua-rio siga trabajando con su página, y cuando su explo-rador recibe la respuesta del servidor, actualizar la

Optimización ASP.NET 2.0¡Como una moto!

Braulio Díez

dnm.asp.net

<< Lo normal cuando

Reyes GarcíaHa sido consultora “todo

terreno”.Hoy día se dedica algratificante mundo de la

docencia.

Braulio Díezcolabora habitualmente condotNetManía. Es MCSD en

programación distribuida con Visual C++.

Trabaja como SolutionsDeveloper de Avanade.

Hace un tiempo leí un artículo que comparaba ASP.NET con PHP, la conclusión delautor era que si bien ASP.NET era muy amigable y orientado a objetos, PHP era másrápido al no tener artificios.La conclusión que saqué es que si ASP.NET es tan fácil demanejar, nadie se preocupa en dedicar un tiempo a estudiar la maquinaria de optimi-zación que trae incorporada...En este artículo vamos a ver las novedades que nos traecon Visual Studio 2005 en este área.

Reyes García

Llamadas fuera de bandaSirve Para Ejecutar eventos en el servidor y actualizar

la página actual, sin tener que enviar la pági-na completa.

MejoraPrincipal

Round trips: los paquetes que se envíanson más pequeños.

Más usabilidad: permite trabajar mientrasla operación en background se está proce-sando.

Obervaciones En teoría debe funcionar para todos losexploradores, pero en Beta 2 sólo estaba lis-to para IE.

Page 26: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

dotN

etM

anía

<<

26

dnm.asp.net<<

página usando DHTML. Los paráme-tros de petición y respuesta, son sendascadenas de texto (bueno, un string pue-de contener XML, así que en el fondopodemos enviar y recibir lo que quera-mos…). La figura 1 muestra el ciclo devida de un evento de servidor de ASPX1.1, que podemos comparar con el deuna llamada fuera de banda (figura 2).Como se puede apreciar el segundo con-sume menos ancho de banda y recursosdel servidor.

En la Web de dotNetManía puedebajar un ejemplo simple que utiliza estatécnica, consiste en una página com-puesta por un combobox y un control ima-gen. En el combobox tenemos el nombrede los autores de dotNetManía, y en la

foto mostramos el seleccionado en esemomento, el cambio de selección y lacarga de la foto lo realizamos usandollamadas fuera de banda (ver figura 3).

Páginas asíncronasNormalmente las páginas ASP.NET

son síncronas, es decir, cuando viene unapetición, se le asigna una hebra, y dichahebra se queda a la espera de que la peti-ción sea completada. En un principio estoparece correcto, pero… ¿qué pasa si unade nuestras páginas llama a servicios Webde otros proveedores, o a procesos de cál-culo/lectura de BD que pueden tomar untiempo considerable en ejecutarse? Elresultado es que la hebra asignada a la peti-ción se quedaría ocupada y, en realidad,consumiría recursos sin estar haciendonada (ver figura 4). Dichas hebras sonrecursos limitados, de forma que si tuvié-ramos un número determinado de peti-ciones a la página en cuestión, ¡ podría lle-gar saturar el servidor! Debido a esto elresto de páginas “normales” no podríanser procesadas, la cola de peticiones pen-dientes estaría llena (ver figura 5).

Figura 1. Ciclo de vida evento a servidor - ASPX 1.1

Figura 2. Ciclo de vida llamada asíncrona - ASPX 2.0

Figura 4.Aplicación de ejemplo:Llamadas fuera de banda

Figura 4. Tienda web, formalización de pedido y petición de cálculo de gastos de envío acompañía de transportes

Figura 5. Servidor web bloqueado por un número limitado de peticiones de páginas conprocesos asíncronos

Page 27: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Para solucionar este problema usa-remos lo siguiente:

• Llamadas asíncronas a servicios Weby/o ADO.NET: se dividen en dospasos, un primero BeginInvoke y unsegundo EndInvoke.

• Páginas asíncronas: ejecuta las lla-madas asíncronas, duerme las hebrasy las incorpora a la cola de hebras,cuando todas las llamadas asíncro-nas se han ejecutado.

Otra ventaja de utilizar páginas asín-cronas es que podemos lanzar todas laspeticiones asíncronas en paralelo, y queel Framework se encarge de avisarnoscuando están todas listas, en vez de irlanzándolas una a una.

De la Web de dotNetManía pue-des descargar un ejemplo que procesade forma asíncrona una llamada a unservicio Web de Amazon (en fuente 1 y2 puedes ver fragmentos del mismo).

Caché 2.0Cuando subimos una aplicación a

producción, una de los detalles quedebemos tener en cuenta es el asignar-le caché a ciertas páginas y ciertos datos,para que el servidor tarde menos en pro-cesar las respuestas, y minimizar el trá-fico entre nuestra aplicación y el servi-dor de base de datos.

¿Como funciona la caché en ASPX1.1? Básicamente consiste en coger unapágina, o un segmento de datos (porejemplo un DataTable que contuviera lalista de delegaciones de nuestra empre-sa), y en vez de hacer que nuestra apli-cación lea de la base de datos cada vezque se hiciera una petición, mantener-lo en memoria por un tiempo (por ejem-plo 3 minutos). Esta aproximación haceque nuestro servidor tarde muy poco engenerar una página, ya que lo tiene todopreparado para montarla o incluso latiene ya montada. El problema aquí esque, al darle un tiempo fijo de validez ala caché, si el cambio de unos datos escrítico para el negocio, tenemos o bienque no usar caché o darle un tiempo devida muy corto.

Si mal no recuerdo, en un sitio Webde visitas masivas, la página principal latenían en caché por 5 segundos, lo quehacía que se pudieran responder muchasmás peticiones, pero… ¿y si pudiéramosmantener dicha caché hasta que real-mente cambiaran los datos? Eso mismoes lo que incorpora la caché en ASPX2.0, dialoga con SQL Server e invalidauna caché cuando su fuente de datos acambiado, esto nos lo proporciona dedos formas:

• Para SQL Server 7.0 y 2000: El siste-ma de caché funciona a nivel de tabla,y ASP.NET pregunta cada <x> segun-dos si ha habido cambios en la tabla

dotN

etM

anía

<<

27

dnm.asp.net<<

<%@ Page Language="C#" AutoEventWireup="true"CodeFile="Default.aspx.cs" Inherits="_Default" Async="true" %>

Fuente 1. (ASPX) En la página le añadimos la opción para que sea asíncrona.

protected void Page_Load(object sender, EventArgs e){

// Vamos a realizar una busqueda de librosKeywordRequest keyword = new KeywordRequest();ProductInfo productInformation = null;

// Buscamos todos los libros que tenga que ver con C#keyword.keyword = "C#";keyword.mode = "books";(…)// Iniciamos la busqueda...PageAsyncTask searchTask;bool executeInParallel = true; // Si hubieran más tareas asíncronas, ejecutarlas en

paralelo

searchTask = new PageAsyncTask(delegate(Object Source, EventArgs ea, AsyncCallback callback,

Object State){

// Arrancamos la llamada al webServicereturn search.BeginKeywordSearchRequest(keyword, callback, State);

},delegate(IAsyncResult Ar){

// cuando recibamos respuesta, la procesamosproductInformation = search.EndKeywordSearchRequest(Ar);

// Transformar el resultado a DataSetDataSet ds = TransformToDataSet(productInformation);dgLibros.DataSource = ds;dgLibros.DataBind();

},null, null, executeInParallel

);

// Registramos la tarea para que se ejcute en paraleoRegisterAsyncTask(searchTask);

}

Fuente 2. (.CS, code-behind) Registramos la tarea asíncrona, le decimos que hacer al arrancar y que hacer alfinalizar la tarea.

Páginas asíncronasSirve Para Extraer temporalmente de la cola de páginas a procesar aquella que esté espe-

rando respuestas de procesos asíncronos (ej. llamada a servicio Web, o pro-ceso pesado de base de datos).

MejoraPrincipal

Carga de servidor: al eliminar de la cola de peticiones aquellas que puedentardar, el servidor puede responder a más peticiones simultáneamente).

Obervaciones Otra ventaja es la de poder lanzar varias tareas asíncronas en paralelo.

Page 28: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

en cuestión (para ello primero hay quepreparar nuestra base de datos, utili-zaremos la utilidad aspnet_regsql quepodemos lanzar desde la línea decomandos, la consola de Visual Studio2005), ver fuente 3.

• Para SQL Server 2005: Se puede afi-nar a nivel de fila de una tabla, ySQL Server, mediante NotificationDelivery Services, es el que nos avisacuando los datos han cambiado; estoes mucho más óptimo que el primer

sistema, pero sólo funciona para estaversión del motor de base de datos.

ViewStateUna de las características mas valo-

radas y odiadas de ASP.NET es, sinduda alguna, el "View State". Por unlado nos permite guardar informaciónsobre el estado y aspecto de nuestroscontroles, así como información propiade la aplicación a nivel de página/esta-do. Por otro lado, toda está informaciónviaja en un campo escondido de la pági-

dotN

etM

anía

<<

28

dnm.asp.net<<

protected void Page_Load(object sender, EventArgs e){

// Ojo, este ejemplo es para SQL Server 2000. Esto sólo// se debe ejecutar una vez, sirve para preparar la base de datos// para usar caché en una tabla, también se puede habilitar usando la // herramienta aspnet_regsql

//SqlCacheDependencyAdmin.EnableNotifications(@"server=LocalHost;//database=NorthWind;uid=sa");//SqlCacheDependencyAdmin.EnableTableForNotifications(@"server=LocalHost;//database=NorthWind;uid=sa", "Categories");

// Para testeo, hacemos un select de la tabla "Categories" de la base de datos// "Northwind" (la trae de ejemplo SQL Server) y lo mostramos en un datagridSqlConnection conn = new

SqlConnection(@"server=LocalHost;database=NorthWind;uid=sa");SqlDataAdapter adapter = new SqlDataAdapter("Select * from Categories",conn);DataSet categories = new DataSet();adapter.Fill(categories);

// Creamos una dependencia que se dispare cuando la tabla "categories" cambie.// "Northwind" es una entrada que hemos creado en el web.config de la aplicación// en la entrada system.web/caching/sqlCacheDependency donde el indicamos el// connection string.SqlCacheDependency dependency = new SqlCacheDependency("Northwind", "categories");

// "Cacheamos" la página, y le decimos que mientras no cambie la tabla "categorías"// no la recargemosResponse.AddCacheDependency(dependency);Response.Cache.SetValidUntilExpires(true);Response.Cache.SetExpires(DateTime.Now.AddMinutes(60));Response.Cache.SetCacheability(HttpCacheability.Public);GridCategorias.DataSource = categories;GridCategorias.DataBind();

// Esto nos sirve para ver que la página es la que estaba en caché.// Para ver un cambio, modifica una entrada en la tabla categories// de la base de datos "NorthWind" (base de datos de ejemplo de SQL Server 2000)Response.Write("Pagina creada el : " + DateTime.Now.ToString());

}

Fuente 3. Ejemplo de uso, caché 2.0

Cache 2.0Sirve Para Guardar una caché de

datos/páginas, que sólo serefresquen cuando realmen-te haya cambios en la base dedatos de la que leemos.

MejoraPrincipal

Tiempo de respuesta del ser-vidor: al no tener que ir abase de datos cada vez quecargamos una página, y notener que poner un tiempoajustado para el refresco dela información, se aprove-chan recursos y se procesanlas peticiones de páginas másrápido.

Obervaciones Donde está más optimizadaes bajo SQL Server 2005, sibien también podemos haceruso de ella en 7.0 y 2000.

ViewStateSirve Para Almacenar información del

estado de los controles de unapágina, así como informaciónpropia a nivel de página.

El ViewState viaja incrustadoen la página que se envía alcliente.

MejoraPrincipal

El formato en que se graba seha optimizado, la informa-ción de ViewState que ahorase genera ocupa menos.

Round trips: los paquetes quese envían son más pequeños.

Obervaciones Para hacer uso de esta mejo-ra sólo tenemos que compi-lar nuestra aplicación enVStudio 2005.

ASP.NET 2.0 dialoga con SQL Server e invalida una cachésólo cuando la fuente de datos cambia. Con SQL Server2000 funciona a nivel de tabla, mientras que con 2005 lo

hace a nivel de fila y con mayor optimización

Page 29: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

na generada para el usuario, con lo que, si nos des-cuidamos, el tamaño de nuestra página en Kb se pue-de disparar. Un ejemplo de este caso se da al usar con-troles pesados como el DataGrid.

En la versión 2.0 se ha optimizado la serializacióndel ViewState, llegando a reducirse al 50 % del tama-ño generado en la versión 1.1.

…Lo mejor de todo esto es que, para hacer uso delnuevo ViewState, lo único que tenemos que hacer esrecompilar nuestra aplicación con Visual Studio 2005.

Precompilación de páginasCon ASP.NET 1.1, cuando nuestra aplicación reci-

be la primera petición, las páginas ASPX son parseadasy precompiladas a código intermedio, con lo que eltiempo de respuesta de cara al cliente es malísimo. Siesto sólo ocurre la primera vez, ¿por qué preocupar-nos.? Bueno seguro que esa primera vez coincide conuna demo que estamos haciendo, o con que uno de losgerentes de la empresa tiene acceso para probarlo comoun piloto, mejor ponerle remedio.

ASP.NET 2.0 nos da la oportunidad de precom-pilar los ASPX, con lo que obtenemos las siguientesventajas:

• La primera petición que recibamos se ejecuta igualde rápido que cualquier otra.

• Evitamos que aparezcan errores de compilaciónde páginas en el servidor en producción.

• Tenemos la opción de no distribuir los ASPX, conlo que ya no se podría modificar nada, ni la pre-sentación de nuestra aplicación. Esto es muy útilpara productos “en caja”.La herramienta que nos permite precompilar

dichas páginas se llama aspnet_compiler, podráencontrar ejemplos más detallados en el apartadode links que sigue.

dotN

etM

anía

<<

29

dnm.asp.net<<

Precompilación

Sirve Para Evitar que las páginas se compilen en la pri-mera petición.

MejoraPrincipal

Tiempo de respuesta: Evita el que la pri-mera petición de una página ASPX seamuy lenta.

Obervaciones También se puede usar para evitarexponer el código fuente (ASPX inclui-dos), así como para evitar que aparez-can errores de compilación en el servi-dor en producción.

Para saber más

Si quiere ampliar información acerca de este tema, aquítiene unos enlaces que le pueden ser de interés:

Llamadas fuera de banda

“Script Callbacks in ASP.NET 2.0”(Dino Sposito) http://msdn.micro-soft.com/msdnmag/issues/04/08/CuttingEdge

“Script Callbacks in ASP.NET2.0 - interesting, but lacking”http://west-wind.com/weblog/posts/2302.aspx

Páginas asíncronas “Async Pages in ASP.NET 2.0”http://odetocode.com/Blogs/scott/archi-ve/2005/06/16/1656.aspx

“Dimtry Robsman, Tech ed 2005-Asynchronous pages in ASP.NET 2.0”http://blogs.msdn.com/dmitryr/archi-ve/2005/07/05/435647.aspx

View State “ViewState Encoding in ASP.NET2.0” http://pluralsight.com/blogs/fritz/archive/2004/06/03/408.aspx

“Whidbey will brings us a shorterviewstate, guaranteed!” http://weblogs.asp.net/vga/archi-ve/2004/05/26/WhidbeyWillBringsUsAShorterViewstateGuaranteed.aspx

Precompilaciónde páginas

“Precompilation in ASP.NET 2.0”http://www.codeproject.com/aspnet/Precompile.asp

En la versión 2.0 se ha optimizado la serialización del ViewState, llegando areducirse al 50 % del tamaño generado en la versión 1.1. Para hacer uso del

nuevo View State sólo tenemos que recompilar nuestra aplicación

Page 30: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Visual Studio 2005 Web Developer Express

Este artículo describe brevemente la nueva herramienta Visual Web Developer(VWD) de desarrollo de aplicaciones y servicios Web con ASP.NET 2.0 orien-tada a estudiantes y a profesionales en fase de aprendizaje.

<< ha sacado una versión de Visual Studio debajo coste destinada a la comunidad de desarrolladoresque sin duda va a facilitar su uso y expansión a nivel mun-dial. Son muchos los programadores que echaban en fal-ta una herramienta de este tipo para iniciarse fácilmen-te en ASP.NET. Se prevé que costará unos 49$, aunqueinicialmente y de forma indefinida podrá descargarse deforma gratuita (es posible que nunca se cobre su coste).

Esta herramienta sustituye y mejora a Web Matrix,el primer entorno de desarrollo gratuito en ASP.NET1.1 que publicó Microsoft y que no tiene soporte aun-que sí una comunidad de usuarios que la usan. Existenimportantes diferencias entre WebMatrix y Visual Studio.NET que serán menores entre las versiones Express yProfessional de Visual Studio facilitando así la transiciónentre ambas versiones. Entre ellas cabe destacar queWebMatrix no tiene Intellisense ni opciones de depura-ción paso a paso, cualidades muy deseables en un entor-no integrado de desarrollo y que sí tienen las versionesExpress de Visual Studio.

Es importante indicar que esta herramienta, VWDno soporta ASP.NET 1.1 pues está diseñada para laversión 2.0 del Framework y está pensada para desa-rrollar en Visual Basic, C# y J#.

En la figura 1 podemos ver una imagen general delnuevo entorno donde se aprecia la similitud con versio-nes anteriores.

Para poder descargarnos la beta 2 podemos acudira: http://msdn.microsoft.com/asp.net/getvwd. En castellanoya tenemos muchos recursos: http://www.microsoft.com/spanish/msdn/vstudio/express.

Recordemos que la beta 2 es gratuita y no está sopor-tada por Microsoft aunque sí existen foros de discusiónsobre el producto (http://forums.asp.net/175/ShowForum.aspx).

Aquí podemos encontrar un tutorial:http://beta.asp.net/QUICKSTART/aspnet/default.aspx

Y una visita guiada con un ejemplo de un sitio Webque usa la base de datos pubs con un control GridViewy un ejemplo de Master Pages: http://beta.asp.net/GuidedTour.

Diferencias con otras versionesDespués de instalar Visual Web Developer 2005

Express con SQL 2005 Express Edition vemos lassiguientes novedades destacables:• El entorno de desarrollo trae su propio motor de

base de datos gratuito SQL Server 2005.• Tiene Intellisense mejorado tanto en el código

HTML como en el código ASP.NET en el len-guaje elegido (Visual Basic, C#, C++ o J#) facili-tando así el desarrollo.

Sergio Vázquez

dnm.laboratorio.net

Por fin Microsoft

Sergio VázquezSergio trabaja de Consultor E-

business en Pangeaes.com. EsIngeniero Superior en

Informática,MCP y Webmasterdel sitio Web

http://www.mutisdotnet.com sobretecnologías .net.También es

Vicepresidente del GUSE.NET.

Figura 1. Vista general del entorno.

Page 31: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

• Trae su propio servidor Web incorporado por sino tenemos IIS instalado para ejecutar y probarlas páginas Web desarrolladas.

• VWD te fuerza a usar el modelo de programaciónde código subyacente alejándose así más de la for-ma de programar con ASP clásico.

• Tiene una utilidad FTP para actualizar y navegarsitios Web de forma remota.

• Es una versión de 30 días que requiere registrogratuito que nos permite descargar libros elec-trónicos.

• Dispone de un asistente para la conversión de pro-yectos de las versiones anteriores de Visual Studio2002 y 2003.

• Permite crear Starter Kits o “soluciones predefi-nidas” que servirán de esqueleto a nuevas aplica-ciones pudiendo contener las clases habituales ycomponentes con las que trabajamos.

• Las Master Pages nos permiten crear una nuevapágina dentro de nuestro sitio Web que tenga lamisma estructura con los mismos apartados quelas demás como si fueran plantillas.

• Los skins o temas permiten dar una apariencia anuestro sitio web y cambiarla con hojas de estilode forma sencilla.

• Tiene más de una docena de nuevos controles deservidor muy interesantes como:o Password Recovery: recupera su clave de un usua-

rio en caso de perderla.o Login: autentifica a un usuario contra la base de

datos.

Con respecto a versiones superiores se diferenciaen lo siguiente:• Está pensado para estudiantes y desarrolladores

noveles.• Las versiones superiores están destinadas a equi-

pos de desarrollo grandes para coordinar y dirigirproyectos.

• Pueden verse las diferencias con más detalle en lasiguiente URL de la Web de Microsoft:http://lab.msdn.microsoft.com/vs2005/productinfo/pro-ductline.

Creando nuestro primer sitio Web conASP.NET 2.0

Una vez que instalamos Visual Studio Web DeveloperExpress notamos que es bastante similar a Visual StudioNET y las diferencias son más bien estéticas. Cuandoempezamos un nuevo proyecto en el menú “Archivo >Nuevo” nos pregunta si crear un nuevo sitio Web, unnuevo servicio Web, un nuevo sitio Web vacío o un sitioWeb a partir de uno de ejemplo.

En la ventana de diálogo del nuevo sitio Web pue-des especificar la localización del sitio Web que pue-de ser:• Un directorio local de tu PC.• Un sitio Web remoto conectado con las extensio-

nes de servidor de FrontPage.• Un sitio Web remoto conectado vía FTP.

Cuando ejecutas una página, Visual WebDeveloper lanza el servidor interno de desarrollo queacepta solo peticiones HTTP del propio equipo perose puede configurar para que use este mini servidorWeb o bien IIS.

dotN

etM

anía

<<

31

dnm.laboratorio.net<<

Figura 2.Creacion de un nuevo proyecto Web.

Figura 3. Ejecución de una página Web.

Este producto es ideal para iniciarse enla programacion de aplicaciones Webcon ASP.NET 2.0 y desarrollar rapida-

mente nuestras webs aprovechando losnuevos componentes que incluye

Page 32: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Preguntas frecuentes acerca de VisualStudio Express 2005

1.- ¿Puedo tener a la vez en la misma máquinaVisual Interdev, VS2003 y VS2005 sin problemas?

Sí.2- ¿Puedo desarrollar aplicaciones para la versión

1.1 de ASP.NET?No, pues cada versión de Visual Studio está desti-

nada a una versión diferente del Framework. La version2005 sólo puede ser usada para crear aplicaciones que seejecutan en la versión 2.0 del Framework. Si abrimos unproyecto de la versión 2003 de Visual Studio, se con-vertirá en otro nuevo con la versión 2005 y permite guar-dar copia de seguridad de la versión anterior.

3.- ¿Donde puedo encontrar una lista de cambiosque hay entre las versiones 1.1 y 2.0 del Framework?

Aquí: http://www.gotdotnet.com/team/changeinfo/Backwards1.1to2.0.

4.- ¿Donde puedo encontrar ayuda y soporte?En los foros de ASP.NET en la Web de Microsoft

en castellano y en http://forums.asp.net.5.- ¿Qué tipo de aplicaciones puedo construir con

la edición Express?Aplicaciones Web con formularios y servicios Web.6.- ¿Qué beneficios obtengo si registro el producto?Te puedes descargar libros electrónicos gratuitos

en inglés que puedes ver aquí: http://lab.msdn.micro-soft.com/express/register.

Podéis encontrar más preguntas frecuentes eninglés aquí: http://lab.msdn.microsoft.com/express/faq.

ConclusionesEn este artículo hemos visto que con este entorno

integrado que incluye motor de base de datos gratuito,herramienta de desarrollo Web, servidor Web y ejem-plos de pruebas, no necesitamos mucho más para poderempezar a desarrollar aplicaciones Web con ASP.NET2.0 que no requieren equipos de desarrollo con rapidez.

Si queréis más detalles sobre los Skins, Master Pagesy los nuevos controles podéis consultar el artículo deJosé M. Alarcón. Para desarrollar aplicaciones más gran-des y complejas que requieran alta disponibilidad y ren-dimiento se encuentran las versiones Standard, Professionaly Team System que se describen en el artículo de JavierIzquierdo, responsable de producto en Microsoft.

dotN

etM

anía

<<

32

dnm.laboratorio.net<<

Requisitos del Sistema

Hardware Software

ProcesadorMínimoProcesador de tipo Pentium a 600 MHzRecomendadoProcesador de tipo Pentium a 1 GHz

Sistema OperativoWindows 2000 SP4Windows 2003 Server Windows XP SP2Windows Vista

Espacio en disco500 MbLa instalación completa ocupa 1.3Gb

Microsoft ASP.NET 2.0

RAMMínimo 128MbRecomendado 256 Mb

PantallaMínimo800 x 600, 256 colores Recomendado:1024 x 768, color de alta densidad de 16 bits

EdicionesVisual Studio 2005

Team System1 Professional Standard Express2

Coloreo de código eIntellisense

Sí Sí Sí Sí

Lenguajes:Visual Basic,C#,C++, J#

Sí Sí SíIndividualmente.

VWD:VB, C# y J#

Proyectos Windows Sí Sí SíExcepto con Visual

Web Dev

Proyectos Web Sí Sí SíÚnicamente conVisual Web Dev

Proyectos Mobile Sí Sí Sí

Desarrollo con SQL Server Sí Sí SíSQL Server

Express Edition

Reporting Services Tools Sí Sí SíSQL Server

Express Edition

Acceso a Datos Remotos Sí Sí Sí

Diseñadores visuales dedatos

Sí Sí

Depuración Remota Sí Sí

Visual Studio SDK Sí Sí

Proyectos Excel, Word eInfoPath

SíVSTMOS

20053

Modelado con Visio SíRequerirá

MSDNPremium

Análisis de Código Sí

Herramientas para arqui-tectos

Herramientas para testers Sí

Administración de proyectos Sí

VS 2005 Team FoundationServer

SQL Server 2005Developer Edition

1 Existen variaciones según la edición específica de Team System.2 Existen variaciones entre los distintos productos Express.3 Visual Studio Tools for MS Office System es un producto independiente.

Con las versiones superiores de este producto se puede coordinar un equipo dedesarrollo completo asignando tareas a sus

miembros y trabajando en equipo

Page 33: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-
Page 34: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Entrevista a Mike Hernández y Donald DrakeEquipo de desarrollo de Visual Studio Tools for Office 2005

Mike Hernández, Community Program Manager de VSTO 2005, y Donald D.Drake,Director del equipo de desarrollo también de VSTO 2005,pasaron por Madrid,con motivo del VSTO Tour 2005, y dotNetManía tuvo la ocasión de entrevistar-les, para pulsar sus opiniones acerca de esta nueva versión.

si Office se estámoviendo en el sentido de pasar aser una aplicación a integrarse conotras, a ser una plataforma propiacon modelos de programación vin-culados con ella.

En un cierto sentido podríadecirse así. En el sentido de queOffice permite hacer la mayor par-te de las cosas que pueden hacersehoy día en las aplicaciones Windows,dispone de acceso a datos, de mode-los de objetos, de posible conexióna servicios Web, podría decirse quees una plataforma de desarrollo.Sería como una nueva “façade” decara a ciertos desarrollos corporati-vos. La integración de los nuevosdiseñadores de Visual Studio es unpaso más en ese sentido.

Al estar basada esta versión en el nuevo CLR 2.0,¿en qué forma ha afectado a Visual Studio Tools forOffice (VSTO a partir de ahora) las nuevas caracte-rísticas de lenguajes y las extensiones a las libreríasexistentes?

Aprovechamos muchas cosas y ninguna en par-ticular. Existen nuevos tipos y los usamos en gene-ral, pero nada en particular. Hay un nuevo tipo dedocumento, y tenemos extensiones de las SmartTags, pero nada específico que venga de la versión2.0 del CLR.

¿Hay algunos tipos de proyectos nuevos, ademásde los ya existentes de Word y Excel?

Sí, ahora existen proyectos de tipo InfoPath yOutlook.

¿Puedes explicarnos la diferencia entre ProyectosOrientados a Documentos y Proyectos Orientados aAplicaciones?

Podría decirse que depende de si se trata de per-sonalizaciones para un documento dado o de proyec-tos genéricos que van producir nuevos documentos,o manipular información a partir del código fuenteinterno y las peticiones del usuario. Por ejemplo, losproyectos de Outlook, tendrían más que ver con elnivel de aplicación.

La tecnología ClickOnce va a ser una de las gran-des innovaciones en el nuevo visual Studio. ¿Existencambios en ese sentido para VSTO?

No. Hay diferencias en la forma en que funcio-nan los proyectos de VSTO y los de Visual Studio.

Marino Posadas

dnm.directo.entrevistas

Marino Posadas esasesor técnico y

redactor dedotNetManía, MVP de

C# y formador deAlhambra-Eidos

<< La primera cuestión es

Donald D. Drake y Mike Hernández

Page 35: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Quizá en la próxima versión, la tecno-logía se integre de forma más clara, perono en la actual versión.

La forma de distribución de las apli-caciones se ha visto extendida de algu-na otra forma, para incluir característi-cas de seguridad, por ejemplo utilizan-do Active Directory, o sigue usándose losServidores de Ficheros?

Básicamente, se siguen usando losservidores de ficheros para distribuirdocumentos y DLL a los clientes. Perose integran con la seguridad de los ser-vidores directamente.

Ahora que la seguridad está siendoun tema prioritario para la mayoría deempresas y desarrolladores, ¿en qué for-ma se ha mejorado la seguridad en estaversión?

VSTO utiliza la seguridad vincu-lada al código (CAS: Code access secu-rity) igual que cualquier otro códigode .NET Framework. De forma que,en ese aspecto, funciona exactamen-te igual a la versión anterior. La segu-ridad se encuentra vinculada a losensamblados y estos necesitan per-misos FullTrust para garantizar losaccesos.

¿Qué es exactamente el Editor deManifiestos de Aplicación, del quehemos oído hablar?

La información de metadatos deensamblado no era sencilla de modifi-car y con este editor permitimos que elprogramador la modifique más fácil ysencillamente. Es información que con-tiene datos como, por ejemplo, a quéensamblados está vinculada la aplica-ción, características de distribución, ver-siones, etc.

Los usuarios mu-chas veces son reti-centes hacia las nuevasversiones debido aproblemas con lasmigraciones y las difi-cultades que surgen deestos procesos. ¿Po-déis decir algunaspalabras de esperanzapara aquellos quequieran realizar mi-graciones?

Lo mejor que po-demos decir es que no se necesita ningúntipo de migración. Todo el código crea-do para la versión anterior, compilará per-fectamente en esta nueva versión. Haycosas que han cambiado para aprovecharlas nuevas características. Muchas veces,asociadas a novedades del propio VisualStudio 2005.

¿Estarán disponibles todas las carac-terísticas del modelo de objetos de cadaaplicación para los distintos proyectos,de forma sencilla?

Sí todo lo que se presenta en elmodelo de objetos estará disponibletambién para los desarrolladores de

aplicaciones VSTO,sin limitaciones, através de los PIA(Primary InteropAssemblies). Pero vana poderse utilizartambién los nuevoscontroles presenta-dos por esta versión,y también hemosañadido un mejormodelo de progra-mación vinculadocon los Action Panesy los Smart Tags.

¿Dispondremosde facilidades para utilizar las macrosde tipo VBA?

Existe un soporte de macros, pero sila pregunta es en el sentido de si se elimi-na VBA, te diré que no, que VBA estarádisponible bastante tiempo todavía. Loque no se va a hacer es mejorarlo en nin-guna forma, eso no tiene sentido. Seráposible, eso sí, utilizar los nuevos objetosdel modelo desde el VBA existente, peroeso es todo. El lenguaje, el entorno, y elruntime no cambian.

¿Respecto a Office 12, qué es loque podéis aportar de cara al desarro-llo? ¿Seguirá siendo compatible haciaatrás?

Pensamos sacar una nueva beta deVSTO con la beta de Office 12. Y traseso, tendremos la versión final, conOrcas (o Visual Studio 9). De hecho enel PDC mostramos una versión deVisual Studio Orcas que soportabaOffice 12.

En conclusión, ¿cuáles diríais queson los mejores argumentos para ani-marse a dar el paso a esta nueva ver-sión?

Supongo que todas las novedades decara al desarrollador vinculadas a VisualStudio 2005, por un lado, y otras carac-terísticas como la seguridad, producti-vidad, nuevos controles y entorno mejo-rado. Además del soporte de proyectosOutlook, que es una de las cosas que losclientes más nos habían solicitado.También habría que citar el nuevo ymejorado Modelo de Programación, lasmejoras de los Action Panes, y nuevascaracterísticas del los mecanismos deenlace a datos.

Digamos que ahora, cualquier pro-gramador que sepa hacer algo conWindows Forms, será capaz de escribiraplicaciones VSTO con extrema faci-lidad. Además, todos nuestros con-troles se comportan como controlesestándar, con sus propiedades, méto-dos, eventos, etc.

¿Se espera nuevo soporte paraotras aplicaciones de Office, en elfuturo?

Sí, en el PDC se anunció el futu-ro soporte para todas las aplicacionesde Office, dentro de la siguiente ver-sión de VSTO.

dotN

etM

anía

<<

35

dnm.directo.entrevistas<<

Mike Hernández, Community Program Manager de VSTO

Donald D. Drake, Director del equipo de desarrollo de VSTO

Page 36: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Novedades en el estándar de C#Este artículo presenta de manera concisa las novedades fundamentales que ofre-ce al desarrollador la nueva versión del lenguaje C#, características que ya estabanimplementadas casi completamente en las diferentes versiones beta de Visual Studio2005 que hemos ido probando hasta la fecha, y que ahora reciben el espaldarazonatural que representa su estandarización.

reunión, en el pasado mes de junio, laAsamblea General de la organización estandarizado-ra ECMA aprobó dos documentos que deberán con-vertirse en referencia obligada para todos aquellos quedesarrollamos nuestra actividad profesional alrededorde .NET: las terceras ediciones de los estándares rela-tivos al lenguaje de programación C# (ECMA-334) y dela Infraestructura Común de .NET (ECMA-335) [1,2]. Estosdocumentos, que pueden ser descargados gratuita-mente del sitio Web de la organización,http://www.ecma-international.org, constituyen las basessobre las que se cimentan las implementaciones deestas dos tecnologías incluidas en la versión 2.0 de.NET Framework.

IntroducciónLa aparición del lenguaje C# como parte de la

plataforma .NET representó un hito muy signifi-cativo en lo relativo a la generalización del uso delas tecnologías de programación más avanzadas dela actualidad, y especialmente de las centradas alre-dedor del desarrollo rápido basado en objetos-com-ponentes. C# logró integrar de una manera armo-niosa los principales conceptos que hicieron tanimportantes a lenguajes anteriores como C++,Delphi o Java con otros aportes realmente nove-dosos. Superada con creces la prueba de acepta-ción que representa cualquier versión 1, la nuevaversión de C# (que estará implementada al 100%en Visual Studio 2005) nos presenta un lenguajemucho más maduro, que ha incorporado a su reper-torio de características toda una serie de noveda-des importantes que harán el desarrollo mucho másproductivo.

Las nuevas características incorporadas en C# 2.0y que se describen en este artículo son:

• Genericidad• Iteradores• Tipos valor anulables• Métodos anónimos e inferencia de tipos dele-

gados• Declaraciones parciales• Clases estáticas• Distinta visibilidad de métodos de acceso de

propiedades• Calificación mediante aliases• Directivas pragma

GenericidadSin duda alguna, la más importante de todas las

novedades presentes en C# 2.0 es la genericidad. Porello la tratamos más en profundidad en este mono-gráfico con el artículo “Reflexionando” y haciendo“Reflexión” sobre la genericidad de .NET 2.0, de MiguelKatrib y Mario del Valle.

No es una característica exclusiva de C#; elhecho de que está implementada a nivel del CLRha hecho posible que Visual Basic 2005 la incluyatambién, al igual que seguramente harán en el futu-ro otros lenguajes para .NET 2.0.

Se conoce como genericidad (algunas fuentes uti-lizan el término genericidad paramétrica) a la posibili-dad de parametrizar clases, estructuras, interfaces oincluso métodos en función de los tipos de los datosque estos almacenan y/o manipulan. Por ejemplo, acontinuación se muestra una posible implementaciónde una lista enlazada de elementos pertenecientes aun mismo tipo T, el parámetro genérico, que en prin-

Octavio Hernández

dnm.lenguajes.csharp

<< Durante su última

Octavio Hernándezes colaborador habitual

de dotNetManía,Ingeniero en Informática

de Sistemas y MVP deC#.Actualmente es

Director Técnico deDanysoft

Page 37: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

cipio no se especifica. El código asumela existencia de otro tipo genéricoNodo<T>:

La potencia de la genericidad radicaen que permite describir de una manerageneral estructuras de datos y algoritmos,dejando sin concretar los tipos de datossubyacentes para que sean especificadosmás adelante por el usuario del códigogenérico. Por ejemplo, a partir de la defi-nición anterior, es posible crear y mani-pular una lista de enteros de la siguienteforma:

El código cliente del tipo genérico esquien indica al compilador en la declara-ción que su lista sólo contendrá elemen-tos de un tipo de datos concreto, enterosen el ejemplo. Gracias a esto, la seguridadde la programación aumenta sensible-mente ya que ahora el compilador es capazde detectar cualquier intento de manipu-lación incorrecta del tipo genérico. Porotra parte, el rendimiento mejora tam-bién, ya que se evitan las verificaciones detipos en tiempo de ejecución y, en el casode los tipos valor, se evita completamen-te la necesidad de realizar operaciones deboxing y unboxing.

Aunque un análisis en profundidad dela implementación de la genericidad enC# y el CLR rebasa los límites de este artí-culo, hay que destacar que se trata de unmecanismo diferente de las plantillas (tem-plates) de C++. De hecho, en Visual C++2005 coexistirán ambas tecnologías.

Por supuesto, no será necesariodesarrollar desde cero estructuras dedatos como la mostrada anteriormen-te para empezar a aprovechar las ven-tajas de la genericidad. La librería declases de .NET 2.0 añade a los conte-nedores “tradicionales” una ampliagama de contenedores genéricos, todosellos dentro del nuevo espacio de nom-bres System.Collections.Generic.

Genericidad restringida

Una característica adicional de lagenericidad que no podemos dejar demencionar es la posibilidad de establecerrestricciones sobre los tipos parámetrosde los tipos genéricos que definamos. Estopermite garantizar de forma estática quelos tipos que se utilicen como argumen-tos de un tipo genérico satisfagan ciertosrequisitos, o más concretamente, queimplementen una interfaz determinada.Por ejemplo, el fragmento de código quese muestra en el fuente 3 establece que eltipo de los nodos de nuestra lista enlaza-da debe implementar IComparable.

Iteradores

Un iterador es un mecanismo quese define para permitir recorrer los ele-mentos de un tipo contenedor, de for-ma que un cliente del tipo pueda obte-ner una secuencia ordenada de estos.No describiremos en detalle las posibi-lidades que ofrece esta característica, yaque publicamos recientemente un exce-lente artículo sobre el tema [6]. A modode ejemplo, el fuente 3 muestra la pro-gramación de un iterador para nuestralista enlazada genérica. Con una imple-mentación como ésa, una aplicacióncliente podría recorrer los elementos deuna lista del modo que se muestra en elfuente 4.

Tipos valor anulablesOtra de las novedades realmente

importantes de C# 2.0 es la que abre laposibilidad de utilizar el valor null(Nothing en Visual Basic, nil en Delphi.NET, etc.) no sólo para los tipos refe-rencia, sino también para los tipos valor.Tradicionalmente, los lenguajes de pro-pósito general no han ofrecido ningúnsoporte en ese aspecto, y se ha hechonecesario utilizar trucos más o menos“sucios” para indicar un valor nulo oindefinido para los tipos valor, talescomo utilizar un elemento “especial”del dominio (por ejemplo, -1 ó 0 paratipos enteros) o mantener señalizadoresbooleanos en variables independientes;técnicas todas que adolecen de incon-venientes importantes. Los tipos valoranulables (la traducción que hemos dadoal término inglés nullable types) resuel-ven definitivamente este problema tanantiguo, ofreciendo soporte integradoen el lenguaje para la utilización delvalor null con todos los tipos valor.

Los tipos valor anulables son real-mente una aplicación sutil de la generi-

dotN

etM

anía

<<

37

dnm.lenguajes.csharp<<

public class Lista<T>{

private Nodo<T> raíz = null;

public bool EstáVacía() { return raíz == null; }

public void AgregarAlInicio(T dato) {

raíz = new Nodo<T>(dato, raíz); }// otros miembros…

}

Fuente 1. Fragmento de definición de un tipo genérico.

{Lista<int> listaEnteros =

new Lista<int>();

listaEnteros.AgregarAlInicio(4);listaEnteros.AgregarAlInicio(3);listaEnteros.AgregarAlInicio(2);

// más código…}

Fuente 2. Consumo de un tipo genérico.

class Nodo<T> where T: IComparable{// implementación de la clase…

}

public class Lista<T> : IEnumerable<T>where T : IComparable

{// implementación de la clase…// enumeradorpublic IEnumerator<T> GetEnumerator(){Nodo<T> n = raíz;while (n != null){

yield return n.Dato;n = n.Siguiente;

}}IEnumerator IEnumerable.GetEnumerator(){return GetEnumerator();

}}

Fuente 3. Ejemplo de genericidad restringidae implementación de iterador.

Lista<int> listaEnteros = new Lista<int>();

// Adición de elementos a la lista…// iterar sobre los elementos de la listaforeach (int i in listaEnteros)

MessageBox.Show(i.ToString());

Fuente 4. Iteración sobre los elementos deuna lista.

Page 38: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

cidad: se apoyan en el tipo genérico predefinidoSystem.Nullable<T>. Internamente, un tipo valor anu-lable combina un señalizador booleano, al que se acce-de mediante la propiedad de sólo lectura HasValue,con un campo del tipo valor subyacente, que puedeleerse mediante la propiedad Value. Si HasValue tienevalor false, se considera que el valor de la variable esnull. Cuando HasValue es true, la propiedad Valuedevuelve el valor almacenado.

C# 2.0 incorpora una buena dosis de “azúcar sin-táctico” para facilitar la utilización de estos tipos. Untipo valor anulable se declara añadiendo al nombredel tipo “base” el modificador ?. Por ejemplo, int ?es la variante del tipo predefinido int que acepta elvalor nulo. El lenguaje provee conversiones implíci-tas del literal null y del tipo valor correspondiente aun tipo valor anulable. Eso hace perfectamente váli-das las instrucciones que conforman el fragmento decódigo que se muestra en el fuente 5.

De entre las diversas aplicaciones posibles de lostipos valor anulables, mencionaremos que pueden serespecialmente útiles a la hora de encapsular los cam-pos de bases de datos SQL que admiten el valor nulldurante el desarrollo de la capa de acceso a datos delas aplicaciones corporativas.

Métodos anónimos e inferencia de tiposdelegados

Los métodos anónimos de C# 2.0 permiten defi-nir delegados “en línea”, en el lugar en que se nece-sitan, eliminando así la necesidad de crear un méto-do o incluso una clase por el simple hecho de que sedesea crear un delegado. El fuente 6 muestra tres ins-trucciones en las que se agrega un delegado a un even-to de tres maneras distintas.

De las tres vías que se utilizan en el fuente 6 paraagregar un delegado al evento Click de un botón, laprimera es la vía “tradicional” (la única válida en laversión 1 de C#). A continuación, la segunda senten-cia muestra otra manera de lograr el mismo efecto,pero evitando la creación explícita de un método gra-cias a un método anónimo. Por último, la tercera sen-tencia de código muestra un ejemplo de la otra nove-dad que se describe en este epígrafe: la inferencia detipos delegados. En principio, ahora ya no es necesa-rio crear explícitamente el delegado, sino que el com-pilador se encarga de generarlo automáticamentecuando le indicamos el método a invocar.

Declaraciones parcialesEn C# 2.0 es posible dividir la implementación de

una clase, estructura o interfaz a lo largo de varios fiche-ros de código fuente. Esta característica puede ser útilde cara a la división del trabajo de programación entrevarios miembros de un equipo o a lograr una mejor orga-nización del código fuente. El propio Visual Studio 2005hace uso de esta característica, separando en dos fiche-ros el código generado automáticamente por el diseña-dor del código y el código introducido por el desarro-llador, como puede verse en la figura 1.

Cada parte de un tipo parcial debe incluir el modi-ficador partial; éste indica al compilador simplemente

dotN

etM

anía

<<

38

dnm.lenguajes.csharp<<

{int? n = null;int? m = 275;

if (m.HasValue)MessageBox.Show("m vale: " + m.Value.ToString());

elseMessageBox.Show("m no tiene valor");

}

Fuente 5. Utilización de tipos valor anulables.

private void Form1_Load(object sender, EventArgs e){

// vía "tradicional"this.button3.Click += new System.EventHandler(this.GestorBotón);

// mediante método anónimothis.button3.Click += delegate

{MessageBox.Show("¡Hola!");

};

// vía "tradicional", usando la inferencia de tipos delegadosthis.button3.Click += this.GestorBotón;

}

private void GestorBotón(object source, EventArgs e){

MessageBox.Show("¡Hola!");}

Fuente 6. Métodos anónimos.

Figura 1. El diseñador de Visual Studio 2005 separa en dosficheros el código de los formularios.

Page 39: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

que pueden existir otras partes del tipoque deberán ser combinadas. Todas esaspartes deberán ser compiladas conjun-tamente, de manera que el compiladorgenere la implementación completa deltipo. De esto se desprende que las cla-ses parciales no permiten “extender”tipos que ya estén compilados.

Clases estáticasLas clases estáticas son una adición

pequeña pero útil al lenguaje C#. Su obje-tivo es permitir “marcar” explícitamente(mediante la palabra reservada static)aquellas clases cuyo objetivo es contenerúnicamente entidades estáticas (de clase),para que el compilador impida que se leañadan por descuido o error miembros deinstancia. Ejemplos clásicos de clases dela librería de .NET Framework que sóloofrecen al programador recursos estáti-cos son Math y Monitor.

El fuente 7 muestra un fragmentode código en el que se define una claseestática.

Distinta visibilidad de métodosde acceso de propiedades

C# 2.0 permite especificar diferen-tes niveles de visibilidad para los méto-dos de acceso de lectura y escritura aso-ciados a una propiedad o indizador (pro-piedad vectorial). Con esto se satisfaceuna petición de muchos desarrollado-res, puesto que es relativamente fre-cuente que se desee exponer pública-

mente el método get, pero limitar lavisibilidad del método set. La sintaxisnecesaria para lograr esto puede versetambién en el fuente 7.

Calificación mediante aliasesLa posibilidad de definir aliases para

espacios de nombres que incorporabaC# 1.0 adolecía de ciertas limitacionesa la hora de ayudar a resolver las ambi-güedades potenciales entre identifica-dores. C# 2.0 añade ahora un nuevomecanismo para permitirnos calificarlos nombres que usamos en nuestrocódigo e indicar explícitamente en quéespacio de nombres debe buscar el com-pilador. La sintaxis, que parece inspira-da en C++, es la siguiente:

<alias> :: <nombre>

<alias> puede ser un nombre de aliaso el identificador global, que indica queel nombre debe ser buscado en el espa-cio de nombres global. Hay que seña-

lar aquí que global no es una nueva pala-bra reservada del lenguaje, sino un iden-tificador normal, que sólo toma un sig-nificado especial cuando aparece a laizquierda de los ::. Lo mismo ocurre conpartial, yield y otros términos presen-tados en este artículo, que sólo adquie-ren su significado especial en el contex-to adecuado. El objetivo de esta medi-da es mantener la compatibilidad conC# 2.0 del código desarrollado para laversión anterior del lenguaje.

Directivas pragma

Por último, #pragma es una nuevadirectiva del preprocesador de C# 2.0,que puede ser utilizada para indicarinformación contextual al compilador.Por ejemplo, mediante directivas prag-ma es posible:• Activar o desactivar la generación de

diferentes advertencias del compi-lador para el código fuente que siguea la directiva.

• Indicar optimizaciones a aplicar alcódigo fuente que sigue a la directiva.

• Suministrar información que puedaser utilizada por un depurador.

ConclusiónEn este artículo hemos descrito las

principales novedades que incluye la3ª Edición del estándar ECMA dellenguaje de programación C#, imple-mentadas completamente en el com-pilador de este lenguaje integrado en.NET 2.0.

AgradecimientosEl autor desea expresar su agrade-

cimiento a Richard Blewett, deDevelopMentor, por sus útiles acla-raciones sobre temas tratados en esteartículo.

dotN

etM

anía

<<

39

dnm.lenguajes.csharp<<

public static class Matematicas{

private static double epsilon = 0.1E-6;public static double Epsilon{

get { return epsilon; } // públicoprivate set {

if (value > 0.1E-2 || value < 0.1E-8)throw new Exception("Value out of range");

epsilon = value;}

}public static double Sqrt(double src){

// cálculo de raíz mediante algoritmo de Newton…}

}

Fuente 7. Clases estáticas y visibilidad de métodos de acceso de propiedades.

Bibliografía

[1] Estándar ECMA-334, “C# Language

Specification”, 3ra. Edición, Junio 2005

[2] Estándar ECMA-335,“Common Language

Infrastructure (CLI)” 3ra.Edición,Junio 2005

[3]Lowy J.“Create elegant code with anony-

mous methods,iterators and partial classes”,

publicado en MSDN Magazine,Mayo de 2004

[4]Clark, J.“Introducing Generics in the CLR”,

publicado en MSDN Magazine,Septiembre

de 2003

[5]Clark, J.“More on Generics in the CLR”,

publicado en MSDN Magazine, Octubre

de 2003

[6]Katrib M., Del Valle M., “Enumeradores e

iteradores en C# 2.0”, publicado en

dotNetManía Nº 7, Septiembre de 2004

Page 40: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

“Reflexionando” y haciendo “reflexión”sobre la genericidad de .NET 2.0

La genericidad es un recurso importante de factorización y reusabilidad en la progra-mación y un soporte para estar más protegidos de cometer errores por inconsisten-cia en el uso de los tipos. La inclusión de la genericidad es una de las más atractivas yclamadas novedades del venidero .NET Framework 2.0.

<< estará presente en los lenguajes C# y VB y esta-rá integrada en el CLR en .NET 2.0. A diferencia de laimplementación de la genericidad en otros lenguajes yplataformas, el CLR se encargará, durante el proceso decompilación JIT, de crear las clases concretas a partir declases que han sido parametrizadas con tipos. De estemodo la genericidad no implica ninguna pérdida de ren-dimiento en ejecución porque el código final ejecutarásegún las especificidades de cada tipo.

Los ensamblados en la versión 2.0 del Frameworkhan sido enriquecidos con nuevos metadatos para per-mitir la representación de los tipos genéricos.Consecuentemente las clases de System.Reflection ySystem.Reflection.Emit fueron adaptadas para ins-peccionar y generar tales clases.

El tema de la genericidad en los lenguajes de pro-gramación ha sido ya tratado en la literatura (ver muybuen ejemplo en lenguaje Eiffel [1]): La genericidaden .NET ya fue abordada en un trabajo previo dedotNetManía [2]. De modo que no es la intenciónde este trabajo dar una introducción a la genericidad.Lo que vamos es a ilustrar cómo usando la reflexión(reflection) podemos hacer convivir las clases genéri-cas, o las clases concretas resultado de la instancia-ción de las clases genéricas, con clases ya existentesque no son genéricas, así como reflexionar sobre algu-nos aspectos de la genericidad que han sido incluidosen el .NET Framework 2.0.

El comodín object y la genericidadEn las versiones previas a la 2.0 la forma más

común de implementar “tipos genéricos” se basaba

en el uso del tipo comodín object. Así los métodos declases como Stack eran consumidores de parámetrosde tipo object y/o tenían a object como tipo de retor-no (fuente 1).

Aunque el tipo object resulta ser una buena alter-nativa para agrupar y definir estructuras que sirvanpara objetos de diferentes tipos, beneficiado ademáspor la capacidad de boxing-unboxing de .NET que per-mite de manera transparente tratar a los tipos porvalor en la jerarquía de object, lo cierto es que por sucondición de clase base de toda jerarquía provoca eluso excesivo de casts con la degradación de rendimientoy la aparición de errores cuando estos casts se haceninadecuadamente.

Por ejemplo, en la línea 4 del fuente 2 se hace uncast a int del valor que se extrae de la pila para pro-vocar una división entera entre 2. Como sólo se adi-cionaron valores enteros (línea 3) el cast es correcto yla división se efectúa correctamente. Sin embargo, enla línea 5 ocurre un error de cast inválido con el tipofloat, pues aunque la asignación de un entero a flo-at es permitida, el fragmento de código (float)

Mario del Valle

dnm.plataforma.net

La genericidad

Mario del ValleEs desarrollador del grupoWEBOO e instructor del

Departamento de Ciencia de laComputación de la Universidad

de la Habana

Miguel KatribEs Dr. y Catedrático del Depar-

tamento de Ciencia de laComputación de la Universidad

de La Habana y jefe del grupoWEBOO.Es un especialista en

lenguajes de programación yentusiasta de la tecnología .NET y

el lenguaje C#.

Miguel Katrib

public class Stack {public void Push(object x) {…}public object Pop() {…}public object Peek() {…}...

}

Fuente 1

Page 41: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

stack.Pop() indica al compilador que debe generaren IL código para hacer unboxing a un supuesto obje-to de tipo Single devuelto por el método Pop, perocomo el objeto devuelto no es Single sino Int32, elcast no se puede efectuar. El principal problema aquíes que estos errores aparecerán durante la ejecuciónde la aplicación y no son detectables por el compila-dor de C#.

Si por el contrario usáramos ahora la nueva cla-se genérica System.Collection.Generic.Stack delFramework 2.0 (fuente 3), los resultados serían lossiguientes:

1. El compilador no permitirá un código que paseal método Push del objeto asociado a la varia-ble stack ningún parámetro que no sea int.

2. El método Pop devuelve int, luego el cast de lalínea 4 es innecesario.

3. El cast a float de la línea 5 no provoca errores,pues ahora sólo indica que debe efectuarse unadivisión real entre el entero devuelto por Pop yel valor 2.

Por lo que disponer ahora de clases genéricas paratoda esta familia de contenedores reduce la apariciónde errores y mejora el rendimiento de las aplicacio-nes con la eliminación de casts innecesarios, ademásde aportar mayor claridad al código.

Replicación de código por falta de gene-ricidad

Las versiones anteriores del NET Frameworkestán plagadas de clases que se han tenido queimplementar sólo para cambiar el tipo generalobject por tipos específicos. Entre los ejemplosmás notables podemos mencionar los delegatesmanejadores de eventos (*EventHandler) de los con-troles. Por ejemplo:

delegate void MouseEventHandler( object sender, MouseEventArgs args)

o

delegate void KeyEventHandler( object sender, KeyEventArgs args)

La única diferencia entre ambos delegates es el tipodel parámetro args. En el nuevo .NET Framework2.0 se incluye un único delegate genéricoEventHandler<T> donde T debe ser un tipo de herede-ro EventArgs y representa al segundo parámetro (args)que se usa de manera convencional en los eventos delos controles. Ahora en vez de definir un eventoMouseUp como:

public event MouseEventHandler MouseUp;

Lo que se hace es:

public event EventHandler<MouseEventArgs> MouseUp;

Sin necesidad de definir un tipo delegate especí-fico. Como resultado se tendrá un evento al que sele podrán anotar métodos como el siguiente:

private void MyControl_MouseUp(object sender,

MouseEventArgs args) {...}

Además de los casos para eventos como el ejempli-ficado anteriormente, nos encontramos en el .NETFramework 1.1 clases como ControlCollection here-deras de CollectionBase y que han definido sus propiosmétodos Add, Remove, etc., sólo para poder lidiar con un

dotN

etM

anía

<<

41

dnm.plataforma.net<<

Stack stack = new Stack();for (int i = 0; i < 10; i++)stack.Push(i);

Console.WriteLine("División entera: {0}",(int) stack.Pop() / 2);Console.WriteLine("División real: {0}", (float) stack.Pop() / 2);

Fuente 2

Stack<int> stack = new Stack<int>();for (int i = 0; i < 10; i++)stack.Push(i);

Console.WriteLine("División entera: {0}",(int) stack.Pop() / 2);Console.WriteLine("División real: {0}", (float) stack.Pop() / 2);

Fuente 3

© Caricatura por Yamil Hernández

Page 42: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

tipo específico que represente al tipo decontenido (Control en el caso deControlsCollection) y de este modo notener que basarse en los contendores gene-rales que usan el comodín object. Laimplementación de todos estos métodosse basa de manera similar en delegar enun ArrayList (que sí se basa en object)toda su implementación y hacer interna-mente los cast correspondientes.

Con el nuevo .NET Framework 2.0tenemos toda la jerarquía de Collectiongenérica, de modo que se puede dispo-ner de la clase deseada con toda la efi-ciencia de usar el tipo directo y sin nece-sidad de replicar la programación. Sinembargo, el espacio de nombresSystem.Windows.Form no ha sido adapta-do a estas nuevas clases genéricas y sigueusando tipos como los delegates antes des-critos, y otros como ControlsCollectiony TapPageCollection que representancolecciones de tipos específicos.

La coexistencia y la transiciónDisponer ahora de clases genéricas

aporta mucho, sobre todo en claridad,confiabilidad y productividad porquereduce considerablemente la cantidadde clases a implementar. Sin embargo,la transición al mundo genérico de lasclases concebidas sin genericidad nose puede aplicar inmediatamente. Lasaplicaciones desarrolladas en el nuevo.NET Framework 2.0 tendrán quepoder convivir con la existencia decódigo anterior a la genericidad.Incluso muchas clases no genéricas delos anteriores espacios de nombres,como el caso ya mencionado deSystem.Windows.Form, aún no tienen unnuevo representante genérico en elFramework. ¿Significa esto que no

podremos usar en contextos no gené-ricos, objetos provenientes de la gene-ricidad y lo contrario usar en contex-tos genéricos objetos provenientes delmundo no genérico?

Si ahora disponemos de genericidadentonces sería deseable poder hacer algocomo:

IList<Control> controls = button.ControlsCollection;

Si realmente conocemos queambas clases ofrecen la misma fun-cionalidad pero que una basa susmétodos en el tipo object y la otra enun tipo genérico.

Por el contrario, también podríamosquerer usar objetos de tipos genéricosadaptados a contextos no genéricos yaexistentes haciendo algo como:

ControlsCollection controls = new List<Control>();

Sin embargo, en C# 2.0, asignacio-nes como las de los dos ejemplos ante-riores no son permitidas, ni se tienenherramientas en el Framework que faci-liten lograr tal efecto.

Al menos convendría tener unaclase que nos permitiera hacer algocomo:

IList<Control> controls =Converters.TypeConvert<IList<Control>>(button.ControlsCollection);

o

ControlsCollection controls =Converters.TypeConvert<ControlsCollection>(new List<Control>());

Para de este modo tratar en un con-texto genérico a los objetos formadosen un contexto no genérico y viceversa.En la siguiente sección veremos cómoimplementar tales conversores.

De no genérico a genérico yviceversa

Una forma de resolver la asigna-ción de objetos no genéricos basadosen el uso de object o de algún tipoespecífico como Control en el caso deControlsCollection a variables defini-das a partir de un tipo genérico es cre-ando una clase que haga de interme-diaria (proxy), como por ejemplo la cla-se ControlList del fuente 4.

dotN

etM

anía

<<

42

dnm.plataforma.net<<

public class ControlList : IList<Control> {private ControlsCollection collection;public ControlList(ControlsCollection collection){Debug.Assert(collection != null, "Parameter collection cannot be null");this.collection = collection;

}public void Add(Control control){collection.Add(control);

}public void Remove(Control control){collection.Remove(control);

}public Control this[int index]{get {return collection[index];

}set {collection[index] = value;

}}...

}

Fuente 4

Con el nuevo .NET Framework 2.0 tenemos toda la jerarquíade Collection genérica, de modo que se puede disponer de la clase deseada con toda la eficiencia de usar el tipo

directo y sin necesidad de replicar la programación

Page 43: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Note que los métodos delegan su implementaciónen un objeto de tipo ControlsCollection. De esta forma laasignación puede realizarse de la siguiente manera:

IList<Control> controls = new ControlList(button.ControlsCollection);

Análogamente, la asignación en sentido contrario(de un genérico a un no genérico) puede resolversetambién usando una clase intermediaria como la delfuente 5.

Note que la implementación de los métodos esexactamente la misma en ambos fuentes, sólo difierenen el tipo de la variable collection en la que delegan(ControlsCollection en el fuente 4 y IList<Control> enel fuente 5).

Siguiendo el patrón de delegación que aplicanestos dos fuentes se puede implementar una claseConverters cuyo método TypeConvert cree dinámi-camente el tipo que hará de intermediario entreambos tipos y que herede del tipo indicado en elparámetro genérico del método TypeConvert. Estemétodo debe devolver un objeto del tipo interme-diario para asignarlo a la variable correspondiente.El método TypeConvert es genérico y el tipo de loque devuelve es el mismo de su parámetro genéri-co (fuente 6 y figura 1).

En un artículo previo en dotNetManía “El Poderde la Reflexión en .NET” [3] ilustramos una forma defactorizar clases usando intermediarios emitidos diná-micamente. La implementación de Converters es bas-tante similar. La diferencia radica en que hay que ins-peccionar y emitir tipos basados en la genericidad, locual será posible gracias a que la reflexión en el

Framework 2.0 permite la inspección y emisión detipos genéricos. El método TypeConvert de la claseConverters pudiera quedar entonces como se muestraen el fuente 6.

Note cómo aquí se aplica el operador typeof al pará-metro genérico T para obtener un objeto de tipo Typeque se corresponde con el tipo utilizado estáticamentepara instanciar la llamada a TypeConvert (como cuandose hizo Converters.TypeConvert<IList<Control>>(b); enla figura 1). Usando reflexión el método CreateType creael AssemblyBuider, ModuleBuilder y TypeBuilder corres-pondiente a dicho tipo (fuente 7).

dotN

etM

anía

<<

43

dnm.plataforma.net<<

public class ControlList : ControlsCollection {private IList<Control> collection;public ControlList(IList<Control> collection){Debug.Assert(collection != null,

"Parameter collection cannot be null");this.collection = collection;

}public override void Add(Control control){collection.Add(control);

}public override void Remove(Control control){collection.Remove(control);

}public override Control this[int index]{get {return collection[index];

}set {collection[index] = value;

}}...

}

Fuente 5

Figura 1.Conversión de objetos de tipos no genéricos a objetos definidos a partir de tipos genéricos.

class Converters{...public static T TypeConvert<T>(object source){TypeBuilder proxyBuilder = CreateType(typeof(T));FieldInfo sourceField = AddSourceField(proxyBuilder, source);EmitCtor(proxyBuilder, sourceField);EmitMethods(proxyBuilder, sourceField);Type proxyType = proxyBuilder.CreateType();ContructorInfo ctor =

proxyType.GetConstructor(new Type[] {source.GetType()});return (T) ctor.Invoke(new object[] { source });

}}

Fuente 6

class Converters{...static TypeBuilder CreateType(Type target){AssemblyBuilder assBuilder = new AssemblyBuilder("…");ModuleBuilder modBuilder = assBuilder.DefineModule();TypeBuilder result = modBuilder.DefineType(baseType.Name + "Proxy", target);

return result;}

}

Fuente 7

Page 44: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

La estrategia que se sigue en la implementaciónde EmitMethods para emitir cada método es buscar cadamétodo abstract o virtual de la clase que se de comotipo target y por cada uno se busca en la clase quedefine al tipo del objeto a convertir, algún método quecoincida en nombre y signatura. Si tal método existe,entonces se emite en la clase Proxy un método queredefine al método de la clase target y cuya imple-mentación delega en el método correspondiente delobjeto a convertir (fuente 8).

No hay ningún problema porque los parámetrosgenéricos son completamente sustituidos por el JIT-compiler cuando se instancian con algún tipo especí-fico. Por ejemplo, el método Add de la interfaz IList<T>definido como:

void Add(T element);

Al ser inspeccionado aplicando reflexión sobre eltipo IList<Control> será como si originalmente sehubiera sido definido:

void Add(Control element);

Es decir, que si por reflexión se le pide al MethodInfode este Add su primer parámetro:

Type listType = typeof(IList<Control>);MethodInfo addMethod = listType.GetMethod("Add");ParameterInfo[] args = (ParameterInfo[])

addMethod.GetParameters();Type firstArgType = args[0].ParameterType;

Se obtiene como resultado en firstArgType el obje-to Type correspondiente a Control.

Note que en las líneas anteriores se ha inspeccio-nado el método de la misma forma que se hace conun tipo no genérico. Por todo esto, la implementa-ción del método FindImplementation del fuente 8 notiene que hacer consideraciones especiales respectode la genericidad para encontrar los métodos coinci-dentes en signatura (fuente 9).

El fuente 10 muestra la implementación del méto-do EmitMethod.

En el artículo “El Poder de la Reflexión” [3] seexplica detalladamente el algoritmo de emisión utili-zado por el método EmitMethod.

Como se puede notar el mecanismo de conver-sión anterior también es aplicable al proceso inver-so, es decir, cuando se va a asignar un objeto de untipo obtenido por una instanciación genérica a unavariable de tipo que no se ha basado en la generici-dad. Es decir, el mismo método TypeConvert puedeusarse para hacer:

ControlsCollection collection a = Converters.TypeConvert<ControlsCollection>(b);

En este caso es el tipo del objeto b el que seríaIList<Control>.

dotN

etM

anía

<<

44

dnm.plataforma.net<<

class Converters{...static void EmitMethods(TypeBuilder proxyBuilder, FieldInfo source){foreach (MethodInfo method in proxyBuilder.BaseType){MethodInfo sourceMethod = FindImplementation(method, source.FieldType);if (sourceMethod != null)EmitMethod(sourceMethod, source)

}}

}

Fuente 8

class Converters{...static MethodInfo FindImplementation(MethodInfo

method, Type sourceType){foreach (MethodInfo sourceMethod in sourceType)if (method.ToString() == sourceMethod.ToString())return sourceMethod;

return null;}

}

Fuente 9

class Converters{...static MethodInfo EmitMethod( MethodInfo mi,

FieldInfo sourceField){Type[] argsTypes = getTypesOf(mi.GetParameters());MethodBuilder methodBuilder = proxyTypeBuilder.DefineMethod(sourceMethod.Name,

MethodAttributes.Public | MethodAttributes.Override, mi.ReturnType, argsTypes);

ILGenerator generator = methodBuilder.GetILGenerator();

generator.Emit(OpCodes.Ldarg_0);generator.Emit(OpCodes.Ldfld, realTarget);for (int i=0; i < argsTypes.Length; i++) generator.Emit(OpCodes.Ldarg, i+1);

OpCode callCode = OpCodes.Call;if (coreMethod.IsVirtual) callCode = OpCodes.Callvirt;generator.EmitCall(callCode, mi, null);generator.Emit(OpCodes.Ret);

}}

Fuente 10

Page 45: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Simulando herencia múltiplemediante la genericidad

La herencia múltiple es un recursoausente en .NET y sus lenguajes. Existendiferentes métodos para simular la heren-cia múltiple. A continuación mostramoscómo podemos simular la herencia múl-tiple con ayuda de la genericidad y lascapacidades de reflexión y emisión decódigo.

Supongamos que queremos que unaclase C heredase de dos clases A y B1. Unaforma de simular la herencia múltiplees que C heredase de A y que simule laherencia de B delegando internamenteen un objeto de tipo B (fuente 11). Lavariable interna b reproduce la funcio-nalidad de B que C hubiese querido here-dar. El operador de conversión implíci-ta nos permite hacer asignaciones de laforma B unB = new C(); como si C here-dase de B.

Con la genericidad podemos “gene-rizar” el patrón anterior. Podemos defi-nir una clase genérica A<T> que sirva paratodo aquel que quiera heredar de A y dealguien más (fuente 12)

En este caso lo que hay que hacer aho-ra es heredar de A<T> instanciando el pará-metro genérico T con el otro tipo del cualse quería heredar además de A.

class C : A<B> {...}

Como A<T> hereda de A podemoshacer A unA = new C(); y, por el opera-dor de conversión implícito, podemoshacer B unB = new C();

Pero lamentablemente con esto nobasta como veremos en la secciónsiguiente.

Simulando la redefinición demétodos

En una situación de herencia múlti-ple real en la que C heredase de A y B, unmétodo virtual F definido en B puede serredefinido en C de forma que al hacer:

B unB = new C();

...

unB.F(...);

se aplique el polimorfismo y se lla-me al F redefinido en C. Pero como enel patrón de simulación seguido en elfuente 11, la variable en la que se dele-ga es de tipo B, el F al que se seguiría lla-mando es al de B.

Un patrón de solución es el que semuestra en el fuente 13. En lugar de dele-gar en una variable de tipo B lo que se hacees definir una clase interna InnerB. Elmétodo F de C puede ser llamado a partirde la llamada al F de B si hacemos que lavariable b refiera a un objeto de otra cla-se InnerB heredera de B, de modo que

InnerB tenga redefinido el método F de Bdelegando su implementación en el méto-do F que se defina en C.

Lo que ocurre ahora por detrás deltelón cuando se hace:

B unB = new C(...);

es que se aplica el conversor implí-cito que lo que hace es devolver el obje-to interno b que es de tipo InnerB (quehereda de B) y que por tanto se puedeasignar a unB que es de tipo B.

Si ahora se hace entonces unB.F(...)lo que ocurre es que se llama al F defi-nido en InnerB que lo que hace a su vezes llamar al c.F(...) lográndose el efec-to del polimorfismo.

¿Podemos llevar esta solución alpatrón genérico visto anteriormente?

Note (fuente 13) que al redefinir F enC es porque sabemos quién es la clase dela cual queríamos simular herencia múl-tiple (B en este caso) y que sabemos queesta clase tiene un F. ¿Cómo saber si eltipo con el que vamos a instanciar al pará-metro genérico T tiene un método F? Elrecurso de genericidad restringida wherede C# 2.0 parece ayudarnos a acercarnosa una solución La idea es no permitir quecualquier tipo pueda usarse para instan-ciar a la clase genérica sino sólo aquellosque cumplan con las restricciones indica-das (fuente 14).

dotN

etM

anía

<<

45

dnm.plataforma.net<<

1 El mismo patrón se podría seguir si quisiéramos que heredase de más de dos clases

class C : A{protected B b;public C(...){this.b = new B(...);

}...public static implicit operator B (C c){

return c.b;}

}

Fuente 11

class A<T> : A where T : new(){protected T t;public A(){this.t = new T();

}public static implicit operator T

(A<T> source){return source.t;

}}

Fuente 12

class C : A{protected InnerB b;public C(...){this.b = new InnerB(this);

}...public virtual void F(...){...

}public static implicit operator InnerB (C c){return c.b;

}

class InnerB : B {C c;public InnerB(C c){this.c = c;

}public override voif F(...){c.F(...);

}}

}

Fuente 13La herencia múltiple es unrecurso ausente en .NET

y sus lenguajes, pero podemos simularla con laayuda de la genericidad

Page 46: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

De este modo si B implementa IHasF,y tiene un constructor por defecto, paraque valga hacer el this.t = new T(), sepuede hacer:

class C: A<B>{...}

Se podría ahora intentar completarel resto del patrón genérico que segui-mos en el fuente 13 para hacer algocomo lo que se indica en el fuente 15.Pero lamentablemente esto no es posi-ble porque en la genericidad del .NET2.0 no se puede heredar de un tipo quesea parámetro genérico2.

¿Y tanto nadar para ahogarse en la ori-lla? podrá preguntarse con razón el lector.Lo que nos hace falta es un tipo que here-de de T y que delegue la implementaciónde sus métodos virtuales en los métodoscorrespondientes de A<T>. Esto lo podría-mos solucionar si podemos convertir unobjeto de tipo A<T> en T, que es precisa-mente lo que hace el método TypeConvertde nuestra clase Converters:

Emitiendo tipos genéricos

Aplicar patrones genéricos, como elque se ha visto en la sección anterior parasimular la herencia múltiple, nos ilustralo que ahora podemos explotar con lagenericidad de .NET 2.0. Sin embargo,para un desarrollador no avezado estopuede resultar difícil y propenso a come-ter errores.

Podría pensarse entonces en desa-rrollar alguna herramienta que auto-matice la labor de “generar una clasegenérica” permitiendo hacer cosascomo esta de “multiplicar” nuestraherencia. Digamos que pudiéramostener un método:

class MultipleInheritance{...public static Type EmitGenericSubtype(

Type baseType, Type constrainType){...}

}

que genera dinámicamente y devuel-ve el tipo genérico equivalente a haberdefinido estáticamente algo como:

class baseType<T>:baseType where T :constrainType

Es decir, que si ejecutamos:

MultipleInheritance.EmitGenericSubtype(typeof(A), typeof(HasF))

se generaría una clase genérica equiva-lente a la que se muestra en el fuente 16.

Afortunadamente con la reflexión del.NET Framework 2.0 podemos emitirclases genéricas a partir de cambios quese hicieron en algunas clases comoTypeBuilder, que fue enriquecida conmétodos como:

GenericParameterBuilder[]DefineGenericParameters(string[] names);

Este método permite indicar losnombres de los parámetros genéricos deltipo emitido por TypeBuilder. A su vezel tipo GenericTypeParameterBuilder, quehereda de TypeBuilder, permite emitircada parámetro genérico. Con su méto-do SetBaseTypeConstrains se puedenespecificar los tipos a los que está res-tringido cada parámetro y con el méto-do SetGenericParameterAttributes se pue-de indicar que el tipo tiene que tener cons-tructor por defecto explícito.

Por razones de espacio no se puededar aquí la implementación de este gene-rador de tipos genéricos (el lector inte-resado puede descargárselo del sitio dedotNetManía).

ConclusionesInvitamos a los lectores de dotNet-

Manía a disfrutar de la genericidad queviene con Visual Studio 2005 y el .NETFramework 2.0, a la vez que con ellopuedan potenciar su capacidad de desa-rrollo. Esperamos con este artículo haberdevelado algunos secretos de lo que pue-de lograrse, otros trabajos deben estarpor venir.

dotN

etM

anía

<<

46

dnm.plataforma.net<<

interface IHasF{

void F(...);}

class A<T> : A where T : IHasF, new(){protected T t;public A(){this.t = new T();

}...

}

Fuente 14

2 Realmente no conocemos ningún lenguaje que permita algo como esto y debemos reconocer que es C#2.0 quien ha llegado más lejos en términos de genericidad.Aunque bien que pudiera implementarse permitir algo así ya que a fin de cuentas toda la información está disponible en tiempos de compilación.

class A<T> : Awhere T : IHasF, new()

{protected InnerT t;public A(){this.t = new InnerT(this);

}public virtual void F(...) {}class InnerT : T { A<T> at;public InnerT(A<T> at){this.at = at;

}public override void F(...){at.F(...);

}}

}

Fuente 15

// Error: No se puede heredar de T porque es un parámetro genérico

class A<T> : Awhere T : HasF, new()

{protected T t;public A(){this.t=Converters.TypeConvert<T>(this);

}public virtual void F(...) {}}

Fuente 16

Referencias

[1] Meyer Bertrand, “EIFFEL The Language”,Prentice Hall 1992, ISBN 0-13-247925-7

[2]Som Guillermo,“Generics y Visual Basic”,dotNetmanía No 8, Octubre 2004, Ed Netalia,España M-3.075-2004

[3]del Valle Mario,Katrib Miguel,“El poder de la refle-xión en .NET”, dotNetmanía No 3,Abril 2004, EdNetalia, España M-3.075-2004

Page 47: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

❑ Deseo suscribirme a dotNetManía por un año (11 números) por un precio de 60,00€ IVA incluido y recibir el CDVolumen 1 con los 11 primeros ejemplares en formato PDF de alta calidad de forma gratuita. Si su dirección está fuera de Españael precio es de 60,00€ transporte incluido (más información sobre envíos internacionales en www.dotnetmania.com)

❑ Deseo que me envíen los números atrasados marcados por un precio de 6,00€ cada uno. Otros:

FORMA DE PAGO❑ Talón nominativo a nombre NETALIA, S.L.❑ Transferencia bancaria a nombre de NETALIA, S.L. a:

La Caixa - Número de cuenta 2100 4315 48 2200014696 (Indique su nombre en la transferencia)

❑ Domiciliación Bancaria (con renovación automática, previo aviso)Indique su número de cuenta:

❑ Tarjeta de crédito❑ VISA ❑ MASTERCARDNúmero de su tarjeta: Fecha de caducidad: / (imprescindible)

Firma y/o sello

a de de 2005

DATOS DE ENVÍO

CIF/NIF. . . . . . . . . . . . . . . . . . . . Empresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nombre y apellidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Dirección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Población . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Código Postal . . . . . . . . . . . . . . . . . . . Provincia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Teléfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fax . . . . . . . . . . . . . . . . . . . . . . . . . . . email . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

DATOS DE FACTURACIÓN (sólo si son distintos a los datos de envío)

CIF/NIF. . . . . . . . . . . . . . . . . . . . Empresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nombre y apellidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Dirección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Población . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Código Postal . . . . . . . . . . . . . . . . . . . Provincia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Teléfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fax . . . . . . . . . . . . . . . . . . . . . . . . . . . email . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Usted autoriza a la mecanizaciónde estos datos. El responsable ydestinatario de éstos es Netalia,S.L. Usted tiene derecho a acce-der a sus datos, modificarlos ycancelarlos cuando lo desee. Susdatos no serán cedidos en ningu-na de las formas posibles a terce-ras partes y no se utilizarán másque para el buen funcionamien-to de su suscripción a la revistadotNetManía y para informar-le de las actividades comercialesque realice la editorial Netalia,S.L. Si no desea recibir informa-ción comercial de dotNetManíamarque la casilla siguiente ❑Puede enviar sus datos por Fax al 91 499 13 64, o por teléfono al 91 666 74 77,

o por email a la dirección [email protected], o también puedeenviarlos por correo postal a la siguiente dirección:

Netalia, S.L.C/ Robledal, 13528529- Rivas Vaciamadrid (Madrid)

❑ Nº6 ❑ Nº 7 ❑ Nº9 ❑ Nº11 ❑ Nº12

❑ Nº13 ❑ Nº14

❑ Nº10

Suscríbase y llévese el CD Volumen 1 GRATIS

Oferta válida hasta el 31 de diciembre de 2005 o hasta agotar existencias

Aún está a tiempo

❑ Nº8

❑ Nº15 Nº16 Nº17

AGOTADO

AGOTADO

❑ Nº18 ❑ N19

Page 48: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

encontraremos en la nueva versión deVisual Basic, (que a partir de esta versión deja de lla-marse .NET para pasar a usar la versión de VisualStudio), las podemos dividir en tres partes:

• Las novedades ofrecidas por el propio lenguaje.• Las novedades ofrecidas por .NET Framework

2.0.• Las novedades ofrecidas por el entorno de desa-

rrollo (o editor).

Veamos cada una de estas novedades, aunque enalgunas no profundizaremos demasiado, entre otras cosasporque necesitaríamos algo más de las páginas de esteespecial, y porque otras se tratan en este mismo núme-ro o han sido comentadas en números anteriores.

Consideraciones previasAntes de comentar las novedades propias del len-

guaje y del entorno de desarrollo de Visual Basic 2005,quisiéramos indicar unas recomendaciones que cual-quier desarrollador que quiera tomarse en serio laescritura de código con Visual Basic.

Option Strict On:Ayuda a escribir mejor código

La primera de ellas es que seleccione la opción decomprobación estricta del código, (Option Strict On),ya que esta opción, a pesar de lo que muchos pien-san, nos ayudará a evitar muchos errores antes decompilar el código, ya que aprovecha una de las carac-terísticas exclusivas del entorno de desarrollo (o edi-tor) de Visual Basic: la compilación en segundo pla-no mientras escribimos.

Para que esta opción esté activada en todos los pro-yectos que creemos, debemos seleccionarla mediante el

menú “Herramientas>Opciones>Proyectos ySoluciones> Valores predeterminados de VB”, tal comose muestra en la figura 1.

¿Dónde están mis ficheros?

La segunda es indicar que, debido a cómo se mane-jan los proyectos y las configuraciones de los mismos enVisual Studio 2005, hay ciertos ficheros, que aparente-mente han desaparecido, entre ellos el ficheroAssemblyInfo, las declaraciones de los controles añadi-dos a los formularios y las referencias a los ensambladosexternos: referencias y referencias Web.

Realmente estos ficheros no han desaparecido. Enel caso de la definición de los controles de los for-mularios, estos están en un fichero aparte, de formaque aprovecha una de las novedades de VB2005: lasclases parciales.

Para poder mostrar todos estos elementos que antesteníamos en el explorador de soluciones, tendremos quepulsar en el segundo botón de la barra de herramientasdel explorador de soluciones, (ver figura 2).

Novedades de Visual Basic 2005

Visual Basic 2005 es, sin lugar a dudas, el lenguaje de los incluidos en la nueva versiónde Visual Studio que más novedades presenta, tanto en novedades del propio lengua-je como en las características ofrecidas por el entorno de desarrollo. En este artículocomentaremos esas novedades de la forma más clara posible, con idea de que el lec-tor comprenda por qué Visual Basic 2005 se convierte en la elección más productivade todas las ofrecidas por Visual Studio 2005.

<< Las novedades que

dnm.inicio.fundamentos

Guillermo “Guille” Som

dnm.lenguajes.vb

Guillermo “Guille” Somes Microsoft MVP de Visual Basic

desde 1997. Es redactor dedotNetManía,miembro de Ineta

Speakers Bureau Latin America,mentor de Solid Quality LearningIberoamérica y autor del libroManual Imprescindible de Visual

Basic .NET.http://www.elguille.info

Figura 1.Seleccionar la comprobación estricta del código.

Page 49: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Como vemos en la figura 2, ese botóntiene también la misma funcionalidad delas versiones anteriores de mostrar todoslos ficheros y directorios de la carpeta enla que tenemos nuestro proyecto. Ademásnos muestra algunos de los ficheros conun símbolo más (+) que nos indica que hayalgo más. Aunque ese “algo más” que hayoculto normalmente está generado por elpropio entorno, por tanto, no deberíamosmodificarlos directamente.

Propiedades del proyecto:Mejor orga-nizado y más asequible

Como hemos comentado, muchas delas opciones que el IDE de Visual Basic2005 nos oculta es porque podemos asig-narlas mediante ventanas de propieda-des, como puede ser la de las propieda-des del proyecto, que ahora tiene unanueva presentación por fichas que sonmás fáciles de manejar y que recopilaotras configuraciones que anteriormen-te estaban disponibles en otros menús oen ficheros de configuración.

Por ejemplo, los valores contenidosen el fichero AssemblyInfo están ase-quibles desde un cuadro de diálogo quese accede desde la ficha “Aplicación”,tal como podemos ver en la figura 3, enla que además podemos ver el resto defichas de configuración, entre ellas la dereferencias.

Para acceder a esta ventana de con-figuración, podemos hacerlo de la mis-ma forma que en versiones anteriores,seleccionando el proyecto y bien usan-do el botón secundario del ratón obien desde el menú “Proyecto”, selec-cionaremos la opción “Propiedades”,con Visual Basic 2005 también pode-mos hacer doble clic en el elemento

“My Project” del explorador de solu-ciones (ver figura 2).

Novedades en el lenguajePara poder ofrecer mayor funcio-

nalidad, el propio lenguaje de VisualBasic se ha visto mejorado con nuevasinstrucciones, de forma que no sea nece-sario acudir a la librería de clases de.NET para poder disfrutar de nuevascaracterísticas. Para ser justos, debemosdecir que muchas de las novedadesincluidas en el propio lenguaje de VisualBasic 2005 son características que yaincluía su compañero de viaje C#; estolo pone a un nivel que antes no tenía, ypor lo que ha sido muy criticado e inclu-so etiquetado como “lenguaje de jugue-te”. A partir de esta versión de VisualBasic, si bien aún no incluye todas lascaracterísticas que muchos hemos soli-citado, podemos afirmar que quién nosaque el máximo rendimiento a este len-guaje, no será un problema propio dellenguaje, sino una falta de visión de losdesarrolladores de versiones anterioresque aún no acaban de adaptarse.Confiamos que este artículo motive aaquellos que no se deciden a dar el sal-to final.

Compatibilidad con el CLS

Debido a que algunas de las nove-dades que incluye Visual Basic 2005son características que no están defini-das en el CLS (Common LanguageSpecifications), en esta versión el atri-buto que indica que el código usado ennuestra aplicación es compatible conesas especificaciones (CLSCompliant)ya no se incluye por defecto en el fiche-

ro AssemblyInfo, cosa queantes siempre ocurría,debido a que el códigogenerado por todas las ver-siones anteriores a la 2005eran totalmente compati-bles con las especificacio-nes comunes del lenguaje,por la sencilla razón de queno disponía característicasque lo hicieran incompati-ble. Por tanto, si queremosque el compilador com-pruebe dicha compatibili-

dad con el CLS, debemos añadir lasiguiente línea de código al menciona-do fichero:

<Assembly: CLSCompliant(True)>

Esto hará que el compilador nosadvierta de esa incompatibilidad en nues-tro código. Aunque no debemos asus-tarnos por ser “incompatibles”, ya queesto solamente afectará a los proyectosde tipo Librería de clases (DLL) que que-ramos usar con otros lenguajes de .NET,y si ese lenguaje es C#, podemos tener lacerteza de que nuestra DLL será com-patible, ya que las características del len-guaje que hacen a VB2005 incompatiblecon el CLS son las que han tomado“prestadas” de C#.

Tipos numéricos sin signo

En toda su historia, el lenguajeBASIC nunca ha tenido tipos numéricossin signo, salvo el tipo Byte. En esta ver-sión se incluyen todos los que actual-mente existen en la plataforma .NET:Uint16, UInt32 y UInt64. Lo novedoso esque se han añadido palabras clave al len-guaje para representar a esos tipos dedatos: UShort, UInteger y ULong respecti-vamente. También se ha incluido el tipoSByte que es un tipo de datos entero de8 bits “con signo”.

Todos estos tipos de datos no soncompatibles con las especificaciones de.NET, por tanto, debemos tener cuida-do a la hora de usarlos como valordevuelto por una función o propiedado como tipo de datos usado como pará-metro de cualquier método.

Para mejorar la lectura, sobre todocuando trabajamos con constantes

Figura 2.Mostrar todos los archivosde un proyecto de VB2005.

Figura 3. Propiedades del proyecto e informacióndel ensamblado.

dotN

etM

anía

<<

49

dnm.lenguajes.vb<<

Page 50: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

numéricas de estos nuevos tipos dedatos, podemos usar los nuevos sufijosnuméricos (o caracteres de tipos) que sehan añadido para dar soporte a estosnuevos tipos. Estos sufijos empiezan conla letra U y pueden ser: US para el tipoUShort, UI para el tipo UInteger y UL parael tipo ULong.

La forma de usarlo sería como semuestra a continuación:

Dim us1 As UShort = 3USDim ui1 As UInteger = 4UIDim ul1 As ULong = 5UL

Instrucción Continue

Esta instrucción nos permitirácontinuar un bucle sin necesidad detener que alcanzar el código que haceque se repita. Y su utilidad está en quenos evitará usar condiciones para queen la repetición del bucle no “pase”por una parte del código. Por ejem-plo, si tenemos un bucle For y partedel código contenido en dicho bucleno siempre debe ejecutarse, lo quehasta ahora hacemos es algo comoesto:

For...Código que siempre se ejecutaIf <condición> Then

Código a ejecutar solo si se cumple la condición

End IfNext

Si usamos la instrucción Continue,el seudo-código quedaría de esta forma:

For...Código que siempre se ejecutaIf Not <condición> Then Continue ForCódigo a ejecutar solo si se cumple la condición

Next

La instrucción Continue se puedeusar con cualquiera de los bucles sopor-tados por Visual Basic: Do/Loop, While yFor/Next, usándose de la misma formaque la instrucción Exit, es decir, paracontinuar un bucle Do/Loop usaremosContinue Do, y para continuar uno deltipo While usaremos Continue While.

El operador IsNot

Con este operador las condiciones usa-das para comprobar si un tipo por refe-rencia no es de un tipo determinado resul-tarán más fáciles de escribir y consecuen-temente el código resultante será más legi-ble. Hasta ahora si, por ejemplo, quería-mos comprobar si una variable no conte-nía un valor nulo, lo hacíamos así:

If Not variable Is Nothing Then ...

Usando este operador, el códigoanterior quedaría de esta forma:

If variable IsNot Nothing Then...

Como podemos comprobar, resultamás legible esta segunda forma.

Este operador sólo podemos usarlocon variables y tipos por referencia. Yaque para los tipos por valor podemosusar el operador distinto de (<>), quesería el equivalente.

La instrucción Using

Esta es una instrucción de bloque, esdecir, el contenido estará definido por lainstrucción Using y acabará con End Using.Después de Using indicaremos uno ovarios objetos que utilizarán algún recur-so del sistema. Cuando acabe el códigocontenido en el bloque, ese recurso se libe-rará llamando al método Disposedel obje-

to u objetos indicados después de Using.Esto nos garantiza que siempre se llama-rá al método Dispose, con la ventaja aña-dida de que esa llamada al método queliberará los recursos se hará incluso si seproduce algún error que no tengamoscontrolado. Using sería equivalente a usarun Try/Finally, de forma que en el blo-que Finally llamemos al método Disposedel objeto. Por tanto, los objetos quepodemos usar con esta instrucción debenimplementar la interfaz IDisposable, quees la que garantiza que dicho objeto ten-ga ese método.

La forma de usar esta instrucción es:

Using variable As New RecursoCódigo a ejecutar

End Using

El ámbito de la variable declaradacon la instrucción Using será el propiobloque de código.

En caso de que indiquemos más deun objeto con la misma instrucción, lostendremos que separa con comas:

Using variable As Recurso, variable2As Recurso2, variable3

Código a ejecutarEnd Using

En este caso, definimos dos variablesjunto a la instrucción Using, además de usarotra variable definida anteriormente.

Declaración explícita del índice infe-rior de los arrays

Los arrays de .NET, y por extensiónlos arrays de Visual Basic 2005, a diferen-cia de lo que ocurría en Visual Basic 6,0 yanteriores, siempre tienen el valor cerocomo índice inferior. Esto en principio nosupone ningún problema, al menos sihemos “cambiado el chip” que teníamosal usar los arrays de VB6, ya que en esa

dotN

etM

anía

<<

50

dnm.lenguajes.vb<<

NOTA

Esto mismo, en los viejostiempos del GoTo, se solucionabadando un salto desde el IF a lalínea en la que está el Next,pero...¿quién usa ya el GoTo? Nadie,peroaún así, en Visual Basic 2005 sesigue soportando esta instruccióne incluso utilizando IntelliSensepara mostrar la línea a la que serealizará el salto. ¡Así nos va!

[ ]

Visual Basic se ha visto mejorado con nuevas instrucciones, deforma que no sea necesario acudir a la librería de

clases de .NET para poder disfrutar de nuevas características

Page 51: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

versión podíamos indicar un rango deíndices de la forma <valor inferior> To<valor superior>. Pero al igual que ocu-rría en VB6, también podemos declarararrays sin indicar ese rango de valores, elproblema es que al usar esa forma dedeclarar, en la que sólo se indica un valor,es que dicho valor representa el índicesuperior del array, de forma que si tene-mos esta declaración:

Dim nombres(5) As String

Aparentemente estamos declarandoun array con cinco elementos, pero enrealidad son seis los elementos: desde 0hasta 5, ambos inclusive.

Para solventar este tipo de declara-ciones, que puede ser confusa para losdesarrolladores de C++ o C#, en estanueva versión de Visual Basic se ha aña-dido la instrucción (por llamarla de algu-na forma), 0 To, la cual se podrá usar enla declaración de los arrays para quequede más claro que realmente estamosdefiniendo un array con elementos des-de cero hasta el valor indicado despuésde To, usando el ejemplo anterior, aho-ra quedaría de esta forma:

Dim nombres(0 To 5) As String

Con lo que podemos comprobar quese consigue mayor claridad.

Sobrecarga de operadores aritméti-cos y conversiones personalizadas

Esta es otra de las características queVisual Basic ha heredado de los lenguajesde la familia C. Con la primera podemoscrear nuestras propias versiones de losoperadores aritméticos y lógicos, de for-ma que podamos definir el comporta-miento que tendrá, por ejemplo, el ope-rador suma (+) en una clase o estructuraque nosotros definamos; la segunda nospermite indicar cómo se realizarán las con-versiones de nuestros tipos con respectoa otros tipos de datos, ya sean definidosen la propia librería de clases de .NETFramework o con otros tipos. Del temade la sobrecarga de operadores y conver-siones, desde el punto de vista de un desa-rrollador de C#, ya lo vimos en el núme-ro 9 de dotNetManía, en ese artículo,además de explicar todo lo relacionado

con la sobrecarga y conversiones, tambiénse indican algunos consejos de “buen uso”.Y cómo no tenemos todo el espacio quesería necesario, veremos sólo unos ejem-plos de cómo hacer eso mismo desdeVisual Basic 2005.

Definir una sobrecarga

Lo primero que debemos saber es quelos operadores que nosotros podemosdefinir en realidad son funciones estáticaso compartidas, es decir, son métodos quesiempre están disponibles en el tipo en elque lo definimos y siempre devuelven unvalor. Pero, en lugar de usar la instrucciónFunction para definirlas, usaremos la nue-va instrucción Operator seguida del ope-rador que queremos sobrecargar. En elfuente 1 tenemos la declaración de unaestructura en la que hemos sobrecargadoel operador de la suma.

Como podemos comprobar, la sin-taxis usada es:

Public Shared Operator +(expresión izquierda, expresión derecha) As Punto

Public Shared es porque los operado-res siempre estarán disponibles y debenpertenecer al propio tipo de datos.

Operator + indica que estamos sobre-cargando un operador, en este caso el dela suma.

Los dos parámetros usados represen-tarán a la expresión izquierda y derecharespectivamente; dichas expresiones pue-den ser de cualquier tipo, pero siempredeben representar a un valor de tipo Punto.

El valor devuelto es del tipo Punto, deforma que se genera un nuevo Punto conel resultado de sumar los dos indicadoscomo argumentos del operador.

La decisión de qué es lo que ocurrecuando se suman dos valores de este tipo,la tomamos nosotros y es el código queutilizaremos dentro de la declaración deloperador. En este caso, creamos un nue-vo objeto a partir del resultado de sumarlos valores de las propiedades X e Y, y esese nuevo objeto el que devolvemos.

Con el resto de operadores haría-mos lo mismo.

Y para usar este operador sobrecar-gado, lo haríamos igual que con cual-quier otro tipo de datos definido pre-viamente en las clases de punto NET,tal como vemos en el fuente 2.

Una cosa importante que debemossaber es que solamente podremos usar lassobrecargas que hemos definido, en estecaso solo tenemos creada una sobrecargade la suma de dos valores de tipo Punto,por tanto si pretendemos hacer esto:

p3 = p1 + 15

Se producirá un error, por la senci-lla razón de que no hemos definido quées lo que tenemos que hacer para sumarun Punto con un entero.

La primera solución será definir esasobrecarga, es decir, el argumento de laizquierda de tipo Punto y el de la dere-cha de tipo Integer:

Public Shared Operator +(ByVal p1 As Punto,ByVal i As Integer) As Punto

Return New Punto(p1.X + i, p1.Y)End Operator

dotN

etM

anía

<<

51

dnm.lenguajes.vb<<

Fuente 1. Definición de la estructura Punto con sobrecarga del operador +

Public Structure PuntoPublic X As IntegerPublic Y As Integer

Public Sub New(ByVal x As Integer, ByVal y As Integer)Me.X = xMe.Y = y

End Sub

' Sobrecarga del operador +Public Shared Operator +(ByVal p1 As Punto, ByVal p2 As Punto) As Punto

Return New Punto(p1.X + p2.X, p1.Y + p2.Y)End Operator

End Structure

Fuente 2. Uso del operador sobrecargadodel tipo Punto

Dim p1 As New Punto(10, 15)Dim p2 As New Punto(22, 33)Dim p3 As Puntop3 = p1 + p2

Page 52: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

El problema es que con esta sobre-carga sólo podemos hacer que el códi-go anterior funcione, pero este otro vol-verá a fallar:

p3 = 25 + p1

Porque no hemos definido la sobre-carga de la suma de un entero y un tipoPunto (en ese orden). Por tanto, la solu-ción será crear una nueva sobrecarga deloperador en la que se indiquen los pará-metros en ese mismo orden.

¿Y si quisiéramos definir sobrecar-gas para más tipos de datos? Pues lo mis-mo... tendríamos que definir dos sobre-cargas para cada uno de los tipos dedatos que queramos soportar, cada unade ellas definiendo el tipo en el “lado”correcto de la operación.

Tedioso ¿verdad? Efectivamente haceresto sería muy “cansado”, pero afortuna-damente podemos aprovechar una carac-terística del compilador de Visual Basicconocida como promoción de tipos. La pro-moción de tipos no es ni más ni menosque la conversión “automática” de un tipoen otro diferente. Por ejemplo, si tene-mos una variable de tipo Short (entero de16 bits) y queremos guardar su valor enotra de tipo Integer (entero de 32 bits),no tenemos que hacer ningún tipo de con-versión, ya que el compilador “sabe” cómoconvertir un valor Short en un Integer. Yesta sabiduría la podemos aprovecharnosotros usando otra de las nuevas carac-terísticas de Visual Basic 2005: la conver-sión personalizada de tipos.

Definir conversiones de datos

De la misma forma que podemossobrecargar un operador, podemossobrecargar la conversión de datos, par-ticularmente la instrucción CType, deforma que podamos indicar cómo actua-rá el compilador cuando se encuentrecon una conversión de cualquier tipo al

nuestro o del nuestro a otro tipo.Como sabemos, existen dos tipos de

conversiones: las implícitas, también lla-madas de expansión o promoción, es decir,las que usamos sin necesidad de hacer nin-guna conversión de datos, por ejemplo,cuando convertimos un valor Short en unode tipo Integer, estamos “promocionan-do” el valor entero de 16 bits en otro de32 bits; el otro tipo de conversión es la lla-mada de reducción y es el tipo de conver-sión que hay que hacer explícitamente, esdecir, debemos indicar que queremos con-vertir un tipo en otro diferente. Este segun-do tipo de conversiones se usan cuando sepuede producir una pérdida de informa-ción, por ejemplo, si queremos guardar enuna variable de 16 bits el contenido de unade 32 bits, es muy posible que se produz-ca pérdida de información, ya que el valorde 32 bits posiblemente no pueda con-vertirse en otro de menos capacidad.

Sabiendo esto, podemos afirmarque las conversiones implícitas se haránsiempre que esa conversión no pro-duzca pérdida de información y pararealizarla no tenemos que indicar nin-guna conversión. Por otra parte, lasconversiones explícitas, que son las quetenemos que indicar expresamente quenuestra intención es hacer una con-versión entre dos tipos de datos, lasusaremos cuando se pueda produciralguna pérdida de información y/o sepueda producir alguna excepción.

En Visual Basic las conversionesimplícitas se definen usando la instruc-ción Widening en la declaración del ope-rador CType:

Public Shared Widening Operator CType(ByVal x As Integer) As PuntoReturn New Punto(x, 0)

End Operator

En este caso estamos declarando unaconversión implícita de Integer a Punto,con lo cual podemos hacer algo como esto:

Dim p4 As Punto = 15

Pero si lo que pretendemos es con-vertir un tipo Punto a entero, podíamosdevolver el contenido de la propiedad X;en este caso es conveniente definirla comouna conversión explícita, ya que perdere-mos parte del contenido del punto. Ladeclaración quedaría de esta forma –en elque usamos la instrucción Narrowing, paraindicar que estamos “reduciendo” el valorde un tipo Punto a uno entero–:

Public Shared Narrowing Operator CType(ByVal p1 As Punto) As Integer

Return p1.X '+ p1.YEnd Operator

Y podemos usarla haciendo una con-versión explícita:

Dim i As Integer = CType(p3, Integer)Console.WriteLine(

“valor de CType(p3, Integer) = {0}”, i)

Como lo que estamos haciendo conese CType es convertir la variable p3 enun entero, podemos usar la función deconversión CInt en su lugar, obtenien-do el mismo resultado:

Dim i As Integer = CInt(p3)

Conversiones automáticas

Como hemos comentado anterior-mente, el compilador de Visual Basic yasabe cómo hacer ciertas conversionesimplícitas, por tanto, si le “enseñamos”cómo hacer una conversión del tipo Puntoa un entero de 32 bits, Visual Basic sabrácómo convertir “automáticamente” unPunto a un entero de menor capacidad:

Dim s As Short = 12Dim p5 As Punto = sConsole.WriteLine(“valor de p5 = {0}”, p5)

dotN

etM

anía

<<

52

dnm.lenguajes.vb<<

Mediante la sobrecarga de operadores podemos definir el comportamiento de nuestros tipos al usar los

operadores aritméticos y lógicos

NOTA

Cuando hacemos sobrecargas de ope-radores o conversiones en nuestros pro-pios tipos, al menos uno de los paráme-tros o el tipo devuelto debe ser del mis-mo que el tipo en el que se declaran,estoes para que no podamos definir operado-res o conversiones de tipos de los que notengamos la declaración.[ ]

Page 53: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Pero si queremos asignar un valor detipo Long, tendremos que indicarlo explí-citamente, y el compilador lo que hará seráconvertir ese valor de Long a Integer y pos-teriormente utilizar la sobrecarga que asig-na un Integer a un Punto. El código quetendríamos que usar (tal y como tenemoslas sobrecargas) sería el siguiente:

Dim l As Long = 12345678901234567890LDim p6 As Punto = CType(l, Punto)Console.WriteLine(“valor de p6 = {0}”, p6)

El problema surgirá, como en estecaso, si el contenido de la variable l esmayor de la capacidad de un entero de32 bits, lo que producirá un error dedesbordamiento (overflow) en tiempo deejecución. La solución sería, por un ladocambiar las opciones de compilaciónpara que no se tengan en cuenta lasexcepciones causadas por desborda-miento de enteros, o bien, definir lasobrecarga de conversión para que uti-lice un valor Long en lugar de uno ente-ro. Por supuesto, el valor Long indica-do en la declaración del operador lo ten-dríamos que convertir en uno entero, ydeberíamos hacer nuestras comproba-ciones por si se produce un error de des-bordamiento. Pero con esta nueva defi-nición del operador de conversión nosaseguramos de que podemos indicarcualquier tipo entero con signo para quese asigne automáticamente a un valorde tipo Punto. Lo mismo es aplicable alas conversiones entre tipos Double ySingle, si definimos la conversión deDouble, el compilador de VB se encar-gará de hacer la otra conversión.

Sobrecarga de operadores lógicos

Además de los operadores aritméti-cos, podemos sobrecargar los operado-res lógicos, los que utilizamos para hacercomparaciones y, como veremos, tam-bién podemos sobrecargar el comporta-miento de nuestro tipo en los casos quetenga que devolver un valor verdadero ofalso. Empecemos con los operadoreslógicos.

Como sabemos, siempre que hace-mos una comparación, ésta se puedehacer de dos formas distintas, por ejem-plo, podemos comprobar si dos valoresson iguales, y también podemos hacerla comprobación de si son distintos.

Debido a esta dualidad de los operado-res lógicos, cuando sobrecargamos unode ellos, debemos sobrecargar tambiénel complementario, y en el caso del ope-rador igual (y distinto) deberíamos cre-ar una sobrecarga del método Equals,de forma que también devuelva un valorque se ajuste a la forma de comprobarla igualdad de dos objetos de nuestrotipo de datos.

La forma de declarar estos opera-dores es similar a la que ya hemos vis-to, aunque, en estos casos, el valordevuelto debe ser un valor de tipoBoolean, ya que eso es lo que se espe-ra cuando hacemos algún tipo de com-paración.

Por ejemplo, podríamos definir losoperadores igual y distinto de nuestrotipo Punto tal como se muestra en el lis-tado del fuente 3.

Como podemos observar en el fuen-te 3, sólo hemos codificado el operadorigual, para el operador distinto, y lasobrecarga del método Equals utiliza-mos la definición de la sobrecarga deigualdad.

Operadores IsFalse y IsTrue

Estas dos nuevas instrucciones deVisual Basic 2005 sólo se pueden usarpara crear sobrecargas, en este caso parasobrecargar el comportamiento de nues-tro tipo cuando debe devolver un valor

verdadero o falso. Estas dos instruccionesequivaldrían a sobrecargar los valoresTrue y False para que se adecuen a nues-tro tipo. Al igual que ocurre con los ope-radores de comparaciones, se debensobrecargar los dos operadores.

dotN

etM

anía

<<

53

dnm.lenguajes.vb<<

Fuente 3. Definición de los operadores igual y distinto

' Sobrecarga de los operadores igual, distinto y sobrecarga de EqualsPublic Shared Operator =(ByVal p1 As Punto, ByVal p2 As Punto) As Boolean

Return (p1.X = p2.X AndAlso p1.Y = p2.Y)End Operator

Public Shared Operator <>(ByVal p1 As Punto, ByVal p2 As Punto) As Boolean' Podemos llamar a la sobrecarga de la igualdadReturn Not (p1 = p2)

End Operator

' Equals nunca debe producir una excepción,' por tanto, si el argumento no es de tipo Punto, devolvemos FalsePublic Overrides Function Equals(ByVal obj As Object) As Boolean

If TypeOf obj Is Punto ThenReturn Me = CType(obj, Punto)

ElseReturn False

End IfEnd Function

Los tipos generics nos permiten crear colecciones fuertemente tipadas en las que el tipo “real” es

el indicado en el constructor

NOTA

Es recomendable que siempre quesobrecarguemos los operadores igual ydistinto, sobrecarguemos el métodoEqual, aunque,a diferencia de C#,VisualBasic no nos avisará de que no hemosrealizado esta sobrecarga. En estoscasos, también se recomienda sobre-cargar el método GetHashCode.[ ]

Page 54: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

dotN

etM

anía

<<

54

dnm.lenguajes.vb<<

En el fuente 4 podemos ver el códigode estas dos sobrecargas en el tipo Punto.

¿Qué operadores podemos sobrecargar?

En la tabla 1 podemos ver los opera-dores que podemos sobrecargar en VisualBasic. Los indicados como unarios signi-fica que el operador sólo reciben un argu-mento, los binarios, por otra parte, reci-ben dos argumentos, que representan alas expresiones situadas a la izquierda y ala derecha del operador.

Novedades de .NETFramework 2.0

Con total seguridad, las novedades quemás llaman la atención, no sólo de Visual

Basic, sino también de C#, son las incor-poradas en el propio .NET Framework.

¿Quién a estas alturas no ha oídomencionar los tipos generics? Seguro quetodos los lectores. Y si, por esas casua-lidades de la vida, el que lee aún no sabequé son los tipos generics, está de suer-te, ya que en este mismo número y dela mano de Mario del Valle y deMiguel Katrib (ambos del grupoWEBOO) han escrito un estupendoartículo que trata en profundidad estanueva incorporación de .NETFramework 2.0, aunque desde el puntode vista del desarrollador de C#, pero siquiere saber cómo usar estos tipos dedatos en Visual Basic 2005, puede des-cargar gratuitamente el número 8 dedotNetManía en el que tratamos losgenerics desde la perspectiva del desa-rrollador de Visual Basic.

De los tipos generics hablaremos muypoco, ya que, tal como hemos comen-tado, está ampliamente tratado en estemismo número y en el número 8 de estarevista, pero desde que se publicó el artí-culo para Visual Basic 2005 hasta aho-ra han pasado unos meses y el artículoanterior se basaba en la versión beta 1,y como se ha añadido nueva funciona-lidad para los desarrolladores de VisualBasic, trataremos esas novedades, aun-que sea brevemente.

Pero primero veamos cómo podemosusar los tipos generics, para que nos sirvacomo recordatorio y también de paso paracomprender cómo utilizarlos en VisualBasic, por tanto, veamos el código fuen-te 5 en el que declaramos una colecciónque sólo acepte tipos de datos Cliente.

Como ya han explicado nuestroscompañeros, la ventaja de este tipo decolecciones es que el tipo de datos uti-lizado por la colección col realmente esde tipo Cliente, con lo cual ganamos enrendimiento, ya que .NET no se ve obli-gado a convertir los valores almacena-dos en Object y tampoco tenemos quehacer conversiones a la hora de utili-zarlos, tal como podemos ver en la figu-ra 4, el compilador “sabe” cuál es el tipode datos que almacena la colección y,por tanto, nos permite el uso deIntelliSense a la hora de acceder a losvalores almacenados.

Los tipos de restricciones que pode-mos hacer

En Visual Basic 2005, las restriccio-nes que podemos hacer en nuestros tiposgeneric pueden ser como en C#, y entrelas diferencias que han surgido desdeque se publicó el artículo del número 8de dotNetManía, tenemos que ya sepuede indicar si el tipo puede ser un tipopor valor o un tipo por referencia; paraestos casos, usaremos en la lista de res-tricciones las instrucciones Structure yClass respectivamente.

En el código mostrado en el fuente6, hemos definido una clase que utilizagenerics con restricciones para que eltipo usado sea por referencia e imple-mente la interfaz IComparable.

Fuente 4. Sobrecarga de los operadores IsTrue y IsFalse, para usar nuestros tipos en comparaciones

' Sobrecarga de IsFalse y IsTruePublic Shared Operator IsFalse(ByVal p1 As Punto) As Boolean

Return p1.X = 0 AndAlso p1.Y = 0End Operator

Public Shared Operator IsTrue(ByVal p1 As Punto) As BooleanReturn p1.X <> 0 OrElse p1.Y <> 0

End Operator

Tabla 1. Los operadores que podemossobrecargar en Visual Basic.

Tipo OperadoresUnario +, -, IsFalse, IsTrue, Not

Binario +, -, *, /, \, &, ^, >>,<<, =, <>, >, >=, <, <=,And, Like, Mod, Or, Xor

Conversión (unario) CType

Fuente 5. Ejemplo de colección generic convalores de tipo Cliente

Dim col As New List(Of Cliente)Dim c As New Cliente("Juan", 33)col.Add(c)

col.Add(New Cliente)col(1).Nombre = "Pepe"

Figura 4. IntelliSense nos muestra los tiposalmacenados en las colecciones generic.

Fuente 6. Definición de una clase genericcon restricciones

' Tipo Generic con restricciones' el tipo indicado debe ser un tipo por ' referencia e implementar IComparablePublic Class UnGeneric(Of T As _

{Class, IComparable})

NOTA

El operador de asignación (=) nose puede sobrecargar,ni tampoco losoperadores de incremento,pero si losusamos, el compilador sabrá lo quetiene que hacer con ellos, y si hemosdefinido una sobrecarga,la usará.Porejemplo, si hacemos esto: p1 += 1, elcompilador usará la sobrecarga de lasuma ya que ese código sería equiva-lente a este otro:p1 = p1 + 1.[ ]

Page 55: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Tipos por valor con valores indefinidos(Nullable types)

En este mismo número, en el artícu-lo de nuestro compañero OctavioHernández sobre las novedades de C#,habla sobre estos tipos de datos, y para noconfundir mucho las cosas, utilizaré la mis-ma traducción que él le ha dado al origi-nal inglés Nullable types: tipos por valor anu-lables, ya que el uso de tipos por valor convalores indefinidos resulta un poco largo.A diferencia de C#, Visual Basic 2005 noincluye instrucciones o palabras propiasdel lenguaje para tratar estos nuevos tiposde datos, para ello tendremos que espe-rar a la nueva versión, en la que se incor-pora una sintaxis parecida a la de C#.

Pero como no estamos hablando delo que se incluirá en VB, sino lo que seincluye en la versión que este mismo messe lanza, veremos cómo usar este tipo dedatos, ya que nos resultarán muy útilesparticularmente en las aplicaciones conlas que accedemos a bases de datos.

La definición que encontramos en ladocumentación de Visual Studio nos dice:“Los tipos por valor anulables representan untipo cuyo valor subyacente es un tipo por valoral que también podemos asignar un valor nulocomo a los tipos por referencia.”

Los tipos por valor anulables que utiliza-remos en Visual Basic será el tipo genericNullable(Of T), es decir, siempre indica-remos el tipo por valor que queremos quecontenga, de forma que, si el valor conte-nido es un valor nulo, indicará que dichotipo no contiene un valor válido. Y esa esla verdadera validez de este tipo de datos.

Como hemos comentado anterior-mente esta circunstancia es muy útil cuan-do trabajamos con valores contenidos enbases de datos, ya que uno de los estadosde esos datos puede ser el “indefinido”, esdecir, un valor nulo. Dicho valor nulo norepresenta un valor real. Por ejemplo, sitenemos esta declaración:

Dim nBool As Nullable(Of Boolean)

La variable nBool puede contener tresvalores: Nothing (o nulo, que indica queno está asignado), True o False (que sonlos dos valores válidos para los tiposBoolean). Como vemos, esto difiere de unavariable declarada con el tipo Boolean, lacual, por defecto, tendrá un valor False,mientras que al definir la variable conNullable(Of Boolean) tenemos la opciónde aceptar un valor indefinido (nulo). Peroaquí no acaba todo, ya que podemos usarlas propiedades y métodos de esta estruc-tura para averiguar si tiene un valor váli-do e incluso para asignar un valor pordefecto en el caso de que aún no tenga unvalor válido.

Para saber si una variable de tipoNullable contiene un valor, podemos usarla propiedad HasValue, esta devolverá ver-dadero si contiene un valor válido para eltipo de datos con el que la hemos defini-do o un falso si no lo tiene.

También podemos usar el métodoGetValueOrDefault para obtener el valorcontenido en la variable (si no es nulo) o elque indiquemos. Y debido a que todos lostipos por valor siempre tienen un valor pre-determinado, al usar este método tenemosdos sobrecargas, una en la que no se indi-ca ningún argumento, en cuyo caso devol-verá el valor predeterminado y la otra enla que indicamos el valor que se utilizaráen el caso de que no esté definido el valor.

Por ejemplo, si declaramos una varia-ble de tipo anulable que sea de tipo ente-ro, y en el caso de que el valor que con-tiene sea nulo podríamos indicar en elmétodo GetValueIrDefault que devuelvael valor 15, y si tiene un valor válido, quedevuelva dicho valor. Esto lo podemoshacer con el siguiente código:

Dim nInt As Nullable(Of Integer)...Dim i As Integer= nInt.GetValueOrDefault(15)

Si en lugar de asignar un valor (en estecaso el 15), queremos que devuelva el valorpredeterminado para el tipo entero (quees el 0), la asignación anterior la tendre-mos que hacer así:

Dim i As Integer = nInt.GetValueOrDefault()

Debido a que la variable nInt en elfondo es un tipo entero, podremos usar-la en las mismas situaciones que el restode variables Integer, incluso podemos asig-narle valores resultantes de una expresiónque de cómo resultado un valor entero.Pero debido a que en realidad no es unavariable Integer sino del tipo Nullable(OfInteger), también podemos asignarle unvalor Nothing con lo que conseguiríamosponerla en un estado “anulable”.

ConclusionesRealmente son muchas las novedades

que incorpora Visual Basic 2005, perolamentablemente es imposible explicarlastodas en el espacio dedicado a un artícu-lo. Afortunadamente en otros artículos deeste monográfico sobre la nueva versiónde Visual Studio se han tratado otros temasque de alguna forma también son válidospara Visual Basic, como son los distintosniveles de accesibilidad para los bloquesGet y Set de las propiedades o las clasesparciales que se ha tratado en el artículode las novedades de C#, o las novedades

en el acceso a datos, que podemos ver enel artículo de Jorge Serrano, en el quenos cuenta las novedades de las aplicacio-nes Maestro-Detalle, donde podemos“saborear” algunas de esas novedades y delos nuevos asistentes del entorno integra-do. Otro de los temas que tampoco hemostratado es sobre un “objeto” especial yexclusivo para los desarrolladores de VisualBasic: My, el cual fue tratado en el núme-ro 8 de esta revista.

NOTA

Las restricciones las podemosusar tanto en las declaraciones declases generic como en los métodosque reciban parámetros genéricos[ ]

En el código de este artículo se incluyen ejemplos de algunas de las novedades que no hemos tenido oportunidad de tratar.

Los tipos por valor anulables que utilizaremos en Visual Basicserá el tipo generic Nullable(Of T), es decir, siempre

indicaremos el tipo por valor que queremos que contengado

tNet

Man

ía<<

55

dnm.lenguajes.vb<<

Page 56: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

levantar la mano cuando se pregunta envoz alta a quien no le gusta estas formas de auto-generación de código, ya que yo soy de esos cabe-zotas a los que le gusta casi de forma enfermiza,controlar el código que escribe para dotarlo de lacalidad y control que quiero que tenga mi código,por eso, pienso que no me hace ninguna gracia queun entorno por muy bueno que sea, como efecti-vamente lo es Visual Studio 2005, me autogenerecierta parte de código… como que no me da con-fianza, para qué engañarnos. Pero muchas veces,nos podemos sorprender, y eso es lo que me hapasado a mí con el asistente para la generación deaplicaciones de tipo maestro-detalle en Visual Basic2005 Express Edition, motivo por el cuál me hedecidido a escribir este artículo.

¿Maestro qué?Casi todos saben lo que digo cuando hablo de

una aplicación maestro-detalle. Si hemos progra-mado en versiones anteriores de Visual Basic, yasea para la plataforma .NET o no, sabremos quehacer este tipo de aplicaciones nos consume unagran parte de tiempo, recursos, y lo que es másimportante, dinero.

Las aplicaciones maestro-detalle buscan rela-cionar unos datos maestros con un conjunto dedatos detalle. Algo obvio ¿verdad? Imaginemos porejemplo, una tabla de familias de productos y sucorrespondiente tabla de productos. Induda-blemente, una familia de productos determinada,tendrá 1 ó más productos de detalle, y un produc-

to pertenecerá sólo a 1 familia de productos.Extendamos pues esto, a una aplicación genéricay tendremos la mecánica normal de una aplicaciónde tipo maestro-detalle.

Visual Studio 2005 y en su caso Visual Basic2005 Express Edition, nos facilita las herramien-tas a través de las cuales podemos generar rápida-mente una aplicación completa de gestión maes-tro-detalle.

Preparando la base de datosSupongamos que tenemos nuestra base de datos

ya preparada. Para no dar muchas vueltas y a modode ejemplo, crearemos dos tablas denominadastbl_FAMILIAS y tbl_PRODUCTOS. La estructura deestas tablas son las que se muestran en la figura 1y figura 2.

¿Maestro-detalle con Visual Basic 2005?¡Chupado!

Los programadores y usuarios de los entornos de desarrollo de Microsoft estánacostumbrados a que los empleados de Microsoft integren en estos entornos, cier-tas funciones que faciliten la tarea del desarrollo a los programadores.Una de esasfunciones es la que tiene que ver con la autogeneración de código, algo que amuchos les gusta, y a otros muchos también, les asusta.

<<

Jorge Serrano

dnm.lenguajes.vb

En mi caso,debo

Jorge Serranoes redactor de dotNetManía. EsIngeniero Informático y MVP deVB y de .NET. Es Webmaster de

PortalVB.com y autor dediferentes libros y artículos

técnicos. Jorge está entre losmejores profesores y

conferenciantes sobre latecnología .NET de nuestro país.

Figura 1. Estructura de la tabla tbl_FAMILIAS.

Figura 2. Estructura de la tabla tbl_PRODUCTOS.

Page 57: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Estas dos tablas, estarán relaciona-das como por ejemplo, como se mues-tra en la figura 3.

Lo único que tenemos que hacer aho-ra, es añadir algunas filas de datos a nues-tras tablas, y así, estaremos ya listos de pre-parar nuestra aplicación maestro-detallecon Visual Basic 2005 Express Edition.

Primer paso,configuración dela fuente de datos

La primera tarea que deberemosrealizar en el entorno de desarrollo, esla de configurar la fuente de datos. Paraello, he iniciado una nueva aplicaciónWindows con Visual Basic 2005 ExpressEdition, y he seleccionado la opción“Datos > Mostrar orígenes de datos”.

De esta manera, iniciaremos la ven-tana de orígenes de datos del entorno,que será el lugar dentro del cuál confi-guraremos la fuente de datos con la quevamos a trabajar para crear nuestra apli-cación maestro-detalle.

Dentro de esta ventana, haremos cliccon el ratón sobre la opción “Agregar”nuevo origen de datos. De esta forma,se abrirá el asistente de configuracióndel origen de datos como se muestra enla figura 4.

Seleccionaremos el origen de losdatos, que para nosotros será “Base dedatos”, y pulsaremos a continuaciónel botón “Siguiente” dentro del asis-tente. De esta manera, el asistente nospresentará la información relativa a laconexión de datos, como se muestraen la figura 5.

Aquí, podremos seleccionar el botón“Nueva conexión…” para establecer unanueva conexión en el caso de no tener-la creada. En mi caso, tengo creada yauna conexión, por lo que la utilizaré ypulsaré el botón “Siguiente” y pondréun nombre a esa conexión de la aplica-ción con la base de datos como se indi-ca en la figura 6.

En esta ventana, pulsaremos nueva-mente el botón “Siguiente”. De estamanera, accederemos a la ventana quecontiene los objetos de la base de datos,y dentro de la cuál desplegaremos lastablas y seleccionaremos las tablas quehemos creado anteriormente, tal y comose indica en la figura 7.

En esta ventana, pulsaremos elbotón “Finalizar”.

Nuestra nueva conexión, apareceráahora añadida a la ventana “Orígenes dedatos” como se muestra en la figura 8.

Nuestra tarea ahora, será la de pre-parar las tablas del origen de datos conel objetivo principal, de que éstas secomporten como datos de tipo maes-tro-detalle.

Segundo paso,preparación delorigen de datos

Hasta ahora, hemos añadido comoorigen de datos, una nueva conexióncon la tabla o tablas que queremos queformen parte de nuestra aplicaciónmaestro-detalle, pero todavía no hemosindicado que tabla actuará como tablamaestra y que tabla actuará como deta-lle. Eso es justamente lo que haremosa continuación.

La tabla maestra para nosotros,será la tabla tbl_FAMILIAS, mientrasque la tabla detalle será la tablatbl_PRODUCTOS.

Inicialmente nos centraremos en latabla tbl_FAMILIAS, para ello y acudien-do a la ventana “Orígenes de datos”,desplegaremos los campos de esta tablacomo se muestra en la figura 9.

dotN

etM

anía

<<

57

dnm.lenguajes.vb<<

Figura 3.Relación de las tablas detbl_FAMILIAS y tbl_PRODUCTOS.

Figura 4.Asistente para la configuración de orígenes de datos.

Figura 5.Opción de conexión de datos.

Figura 6.Conexión establecida con la base de datos.

Figura 7.Objetos seleccionados de labase de datos.

Figura 8.Origen de datosañadido al entorno.

Page 58: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Observaremos en nuestro caso, nosólo los campos de la tabla tbl_FAMI-LIAS, sino los campos que de otra tabla,que por algún tipo de relación estánenlazados con esta tabla.

Haremos clic entonces sobre elcampo FAMILIA_ID primero y sobre elcampo DESCRIPCION después, para abrirla lista desplegable y seleccionar laopción Label como se indica en lafigura 10.

De esta manera, habremos cambia-do el tipo de estos campos, de tipoTextBox a tipo Label. Es decir, seráncampos que no podremos editar. Al serla tabla maestra, no nos interesa en prin-cipio que se cambien sus valores, por loque hemos optado para que se muestrencomo tipo Label.

A continuación, haremos clic sobrela tabla tbl_FAMILIAS abriendo nueva-mente la lista desplegable que aparecea su costado. Una vez hecho esto, obser-varemos un menú contextual dentro delcuál, encontraremos las siguientesopciones:

Representa los datos volcados den-tro de un control DataGrid.Representa los datos volcados den-tro de un control estándar como porejemplo un control TextBox y quereflejaría los datos detalle de la infor-mación.No representa ningún control comotipo de objeto de volcado de losdatos.

Dentro del menú contextual ante-rior, seleccionaremos la opción de vol-cado de datos dentro de controles están-dar o Detalles.

De esta manera, tenemos lista nues-tra tabla o datos maestros, ahora pasa-remos entonces, a preparar los datos dedetalle. Para realizar esta acción, modi-ficaremos en primer lugar y si lo dese-amos, el tipo de controles que quere-mos que se utilicen para mostrar loscampos de las tablas como se indicabaen la figura 10 y que es el resultado quepuede verse en la figura 11.

A continuación prepararemos estatabla para que actúe como tabla detalle.Para ello, deberíamos seleccionar estatabla y seleccionar de la lista desplega-ble la opción “DataGrid”, que es laopción que se utiliza en el entorno dedesarrollo por defecto.

Una vez que hemos finalizado esto,deberemos incrustar o insertar los datosde las tablas maestro-detalle en nuestraaplicación, que es lo que veremos a con-tinuación.

Tercer paso, insertando ennuestra aplicación los datosmaestro-detalle

Lo primero que haremos será inser-tar en nuestra aplicación o formulario

Windows, la tabla maestra. Para ello,arrastraremos y soltaremos la tablatbl_FAMILIAS en el formulario Windowscomo se muestra en la figura 12.

Nuestra tabla maestra quedaráentonces insertada en nuestro formula-rio como se muestra en la figura 13.

Si observamos el entorno de desa-rrollo, veremos que no sólo se han inser-tado los campos de la tabla tbl_FAMI-LIAS, sino que además, se han añadidovarios componentes y controles a nues-tra aplicación. Lógicamente, podemospersonalizar y manipular los controlesy componentes insertados en el formu-lario, pero ahora mismo, lo que nos inte-resa una vez insertada la tabla maestra,es insertar la tabla detalles.

Para ello, arrastraremos y soltare-mos ahora, la tabla tbl_PRODUCTOS al for-mulario de nuestra aplicación. De estamanera, aparecerá en nuestro formula-rio un control DataGrid que correspon-de con los datos de detalle de nuestraaplicación tal y como se muestra en lafigura 14.

dotN

etM

anía

<<

58

dnm.lenguajes.vb<<

Figura 9.Tabla tbl_FAMILIASdesplegada en el origen de datos.

Figura 10.Campos de tipo Label.

Figura 11.Modificación de loscampos para la tabla de detalle.

Figura 12. Insertando los datosmaestros en el formulario.

Figura 13.Tabla maestra insertadaen nuestro formulario.

Figura 14.Control DataGrid insertado en el formulario de la aplicación.

Page 59: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Lo que Visual Basic 2005 ExpressEdition genera en todo esto, es un DataSettipado con el cuál podremos trabajar ennuestra aplicación maestro-detalle. Ennuestro ejemplo, este DataSet tipado loencontraremos en la ventana del explora-dor de soluciones con el nombre PRUE-BAS_maestro_detalle.xsd.

De todos los modos, si ejecutamosnuestra aplicación ([F5]), observaremosque los datos maestro-detalle no están aúnrelacionados entre sí como se muestra enla figura 15. ¿Qué es lo que falta?

Evidentemente, relacionar los datosde ambas tablas. Esto es lo que veremosen el siguiente punto.

Cuarto paso,creando la rela-ción de los datos maestro-detalle

Esta es quizás la tarea más sencillade todo el proceso, pero a la vez es lamás importante, ya que nos permitirárelacionar los datos maestro-detalle paramostrarlos con cierta lógica.

Accederemos a los datos de detallede la tabla PRODUCTOS haciendo clic sobreel control DataGrid y desplegando laventana de “Propiedades” ([F4]).

Dentro de la ventana de “Propie-dades”, deberemos acudir a la propiedad

DataSource y dentro de la lista desplega-ble que aparecerá, deberemos seleccionarla opción correspondiente al campo derelación entre la tabla maestra y la tabladetalle, y que en mi caso es el campoFK_tbl_PRODUCTOS_tbl_FAMILIAS como seindica en la figura 16.

Una vez asignada la relación, volve-remos a ejecutar la aplicación ([F5]) yobservaremos que ahora sí, nuestras tablasmaestro-detalle están relacionadas entresí como se indica en la figura 17.

Los detalles finales de nuestraaplicación maestro-detalle

Ya hemos concluido el trabajo de lapreparación y programación de nuestraaplicación maestro-detalle, aunque comohemos podido observar, mucha, muchaprogramación no ha habido que digamos.

Si observamos el código generadopor el asistente, veremos que el códigoinsertado no contiene instrucciones oacciones fuera de lugar de lo que seríauna aplicación maestro-detalle realiza-da por nosotros mismos. Se trata de uncódigo bastante limpio.

Ahora bien, el control de navegaciónde datos BindingNavigator –uno de loscontroles nuevos del .NET 2.0– contie-ne diferentes opciones que nos permiti-rán añadir, modificar y actualizar, borrary guardar datos. El control DataGrid tam-bién nos facilitará estas tareas.

Aunque nuestra tarea podría haberconcluido aquí, podemos personalizarnuestra aplicación hasta el nivel quedeseemos. Por eso, nuestro trabajo pue-de continuar desde aquí, sabiendo queel asistente nos ha ahorrado una grancantidad de trabajo.

ConclusionesEl asistente de generación de aplica-

ciones maestro-detalle nos aporta unaherramienta “amiga” que nos facilita enor-memente el tiempo de desarrollo y pues-ta en marcha inicial de una aplicación tipomaestro-detalle.

Aunque el asistente nos proporcionala base de este tipo de aplicaciones, no esmenos cierto que a partir de aquí, comien-za nuestra tarea real en el desarrollo, pueses muy común que queramos personali-zar el comportamiento de nuestra aplica-ción para realizar diferentes acciones.

Lo que está claro es que hay dos fac-tores a tener en cuenta a la hora de usareste asistente. El primero es que nos aho-rra tiempo, recursos y dinero. El segun-do por si no fuera ya importante el pri-mero, es que el código generado por esteasistente es limpio, y los retoques quehabría que hacer no son pesados pues elcódigo creado por el asistente a mi modode ver, es un código muy ordenado, lo cuálse relaciona nuevamente con el primerfactor de tiempo, recursos y dinero.

dotN

etM

anía

<<

59

dnm.lenguajes.vb<<

Figura 15.Aplicación en ejecuciónmostrando que los datos no están

relacionados.

Figura 16. Seleccionando larelación de las tablas maestro-detalle en el control DataGrid.

Figura 17. Ejecución final de nuestraaplicación maestro-detalle.

Si observamos el códigogenerado por el asistente,

veremos que se trata de uncódigo bastante limpio

el control de navegación dedatos BindingNavigator

contiene diferentes opcionesque nos permitirán añadir,

modificar y actualizar, borrary guardar datos

Page 60: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

El IDE de Visual Studio 2005El advenimiento de Visual Studio 2005 trae de la mano, como ya es habitual en esteproducto, un notable conjunto de novedades y mejoras, encaminadas como siempre,a simplificar el desarrollo de aplicaciones y aumentar la productividad del programa-dor. En este artículo hacemos una revisión de las más destacadas.

<<Y cuando decimos las más destacadas, además

hemos de puntualizar que realmente vamos a abor-dar sólo aquellas características que efectivamentedespuntan como novedad o mejora relevante, yaque tal es el cúmulo de innovaciones, que posible-mente nos harían falta varios artículos para deta-llarlas todas.

Dado que podemos abordar este tema desde dife-rentes perspectivas, nos hemos decidido a detallar losnuevos aspectos del IDE de Visual Studio 2005(VS2005 en adelante) siguiendo aproximadamente elritmo que nos marcaría el trabajo con un proyectoVisual Basic de tipo Windows, es decir: creación delproyecto, diseño del interfaz visual, escritura del códi-go y depuración.

Y ya sin más dilación vamos a entrar en materia,que hay muchas cosas que contar.

Creación de proyectos, configuración yajustes del IDE

El modo de creación de un proyecto ha variadoligeramente en VS2005. Ahora, el cuadro de diálogode “nuevo proyecto” agrupa dentro de cada lenguajediversas categorías de plantillas de proyecto en fun-ción de las aplicaciones que tengamos instaladas ennuestra máquina, pudiendo elegir desde la clásica apli-cación Windows, hasta la novedosa WindowsPresentation Foundation (más conocida como Avalon).Ver la figura 1.

El lector se preguntará a buen seguro dónde hanido a parar las plantillas para proyectos Web. El moti-

vo reside en que ahora VS2005 separa totalmenteeste tipo de proyectos del resto. Si queremos crearuna aplicación ASP.NET, tendremos que elegir laopción de menú “File > New > Web Site”, apare-ciéndonos el diálogo específico para la creación deproyectos Web: “ASP.NET Web Site”, “WebService”, etc. En este diálogo también seleccionare-mos el lenguaje de programación a utilizar, e inclu-so si queremos que el sitio Web sea creado al modoclásico, usando IIS, o en una ruta de archivos, conlo cual se hará uso de un servidor Web virtual, lo quenos libera de la obligación de tener instalado IIS enla máquina de desarrollo.

Una vez creado el proyecto, debemos detener-nos en su mejorado acceso y manipulación de pro-piedades, las cuales se muestran en una completísi-ma ventana que las organiza en una serie de pesta-ñas, desde las que podemos configurar todos losaspectos necesarios: nombre de ensamblado, for-mulario inicial y de presentación, referencias, recur-sos, etc. Ver la figura 2.

Luis Miguel Blanco

dnm.plataforma.net

Luis Miguel Blancoes redactor de dotNetManía. Es

consultor en Alhambra-Eidos.Haescrito varios libros y decenas de

artículos sobre la plataforma.NET (lalibreriadigital.com)

La renovación de nuestro banco de trabajo

Figura 1

Page 61: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Una de las novedades importantes anivel de configuración del IDE, consisteen la capacidad de poder guardar todoslos ajustes establecidos en el entorno detrabajo dentro de un archivo en formatoXML con extensión .VSSETTINGS.Empleando el menú “Tools > Import andExport Settings” realizaremos esta ope-ración mediante un sencillo asistente, conlo que podremos llevar nuestra configu-ración favorita a otra máquina, evitandoel tedioso trabajo de tener que volver aconfigurar todo manualmente. La figura3 muestra este asistente.

Diseñadores y ventanas adicio-nales

Cuando vamos a diseñar un formu-lario, la caja de herramientas es el pri-mer elemento al que solemos recurrirpara arrastrar y soltar los controles quecompondrán el interfaz de usuario; enesta versión, la ventana “Toolbox” con-tiene más categorías de controles, per-

mitiéndonos tener desplegada más deuna categoría al mismo tiempo.

Por otro lado, a la hora de alinear loscontroles en la superficie del formulario,contamos con unas estupendas guías visua-les, que facilitan en gran medida su orga-nización, y evitarán en muchos casos eluso de las opciones del menú “Format”.

También se van a ver reducidos nues-tros “viajes” a la ventana de propiedadesgracias a los Smart Tags (EtiquetasInteligentes) que acompañan a muchos delos controles, y que vienen representadospor un pequeño icono en forma de flecha,en la parte superior derecha del control.Al pulsar dicha etiqueta, aparecerá unpequeño diálogo con las operaciones másfrecuentes que se realizan sobre el con-trol, pudiendo efectuarlas “in situ”. Lafigura 4 muestra un ejemplo del diseña-dor de formularios.

Otro de los aspectos incómodos en eltrabajo con el IDE, residía en el cambiode posición y acoplamiento de las dife-rentes ventanas que lo componen, ya queen algunos casos era realmente difícildepositar una ventana en el lugar desea-do. A partir de ahora, esta tarea ya no va

a revestir problema, puesto que al moveruna ventana aparecerán los indicadores deposicionamiento que vemos en la figura5; simplemente con situar la ventana sobreuno de ellos, quedará colocada en su nue-vo emplazamiento.

Mejoras en el editor de códigoSon las más importantes con dife-

rencia, ya que el trabajo que dedicamosa la escritura de código, normalmenterepresenta el porcentaje más alto denuestro tiempo global de desarrollo.

En primer lugar, si abrimos el edi-tor para ver el código de la clase del for-mulario, notaremos la falta del códigogenerado por el diseñador, el cual seencuentra ahora dentro de una clase par-cial, en un archivo aparte con una deno-minación del estilo NombreFormulario.

Designer.VB, lo cual nosproporciona una mayorclaridad y limpieza decódigo. Este archivo seencuentra oculto en elexplorador de soluciones,por lo que debemos pul-sar el botón para mostrartodos los archivos de lasolución.

Una característicalargamente demandadaen Visual Basic ha sido la

posibilidad de incluir comentariosXML, al estilo de C#, que nos permi-tan documentar adecuadamente el códi-go. Pues bien, nuestro deseo se ha hechorealidad, ya que ahora, al escribir trescomillas simples en la cabecera de unaclase, método o propiedad, se creará elesqueleto básico para documentarlo, yal hacer uso de ese elemento de código,los comentarios introducidos se visua-lizarán en el ToolTip correspondiente,como vemos en la figura 6.

Entre las incorporaciones realizadasa la tecnología Intellisense podemos des-tacar las opciones de auto corrección,que subrayan una palabra clave malescrita, ofreciéndonos una lista de posi-bles correcciones. Igualmente serásubrayado un identificador que perte-nezca a un tipo que se intente utilizarantes de haber sido instanciado. Por otraparte, para que de un rápido vistazopodamos comprobar cuáles son las nue-

dotN

etM

anía

<<

61

dnm.plataforma.net<<

Figura 2

Figura 3

Figura 4

Figura 5

Page 62: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

vas líneas de código que hemos escrito, en el margendel editor se muestran unos indicadores de color ver-de y amarillo, avisándonos de las líneas grabadas y laspendientes respectivamente. Veamos unos ejemplosen la figura 7.

Existen ciertas operaciones cuyo código normal-mente repetimos hasta la saciedad en todas nuestrassesiones de trabajo. Para ahorrar tiempo en la escri-tura de dicho código, ahora disponemos de los CodeSnippets (Recortes de Código), que consisten en bloquesde código “prefabricados”, almacenados en VS2005,y que pegamos directamente sobre el editor, ahorrandogran cantidad de tiempo de escritura.

El IDE nos proporciona una enorme cantidad deestas piezas de código para resolver multitud de situa-

ciones, pero además, contamos con la posibilidad decrear nuestros propios recortes personalizados median-te el administrador de snippets.

Para agregar un code snippet hemos de hacer clicderecho sobre el editor y elegir la opción “InsertSnippet”, que abrirá una lista de carpetas contenien-do todos los diferentes bloques de código organiza-dos por categorías, como vemos en la figura 8.

A través del diagrama de clases, podemos diseñarvisualmente el esqueleto de una clase, con la particu-laridad de que el editor de código y el diagrama seencuentran sincronizados, es decir, cualquier cambioque hagamos sobre una clase, por ejemplo en el editor,se propagará inmediatamente al diagrama y viceversa.La figura 9 nos muestra esta ventana del diagrama.

Otro de los mecanismos que nos puede ayudara agilizar la escritura es Refactoring, que nos per-mite reestructurar nuestro código de una manerarápida y fácil.

Por ejemplo, supongamos que estamos escribien-do un fragmento de código y estimamos que puede sercandidato a convertirse en un método independiente;lo que tenemos que hacer es seleccionar dichas líneasde código, y con un clic derecho sobre las mismas, ele-giremos la opción “Refactoring > Extract method”, queabrirá un cuadro de diálogo en el que introduciremosel nombre de un nuevo método para las líneas selec-cionadas, y Refactoring nos creará el método con dichaslíneas, situando una llamada al mismo en el emplaza-miento original, como vemos en la figura 10.

dotN

etM

anía

<<

62

dnm.plataforma.net<<

Figura 6

Figura 7

Figura 8

Figura 9

A través del diagrama de clases,podemos diseñar visualmente elesqueleto de una clase, con la

particularidad de que el editor decódigo y el diagrama se

encuentran sincronizados

Page 63: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

En algunas ocasiones, para realizar pruebas,comenzamos a codificar usando los nombres por defec-to que genera el IDE: Form1, Class1, etc., y al termi-nar, si la prueba es satisfactoria y queremos mantenerel código escrito, nos vemos obligados a recorrerlopara cambiar dichos nombres por otros más signifi-cativos, lo cual resulta muy tedioso, sobre todo sihemos escrito bastante código.

Esta operación podemos realizarla ahora en unúnico paso, seleccionando el nombre a cambiar,haciendo clic derecho y eligiendo la opción “Rename”,la cual se encargará de propagar los cambios necesa-rios a lo largo de todo el código.

Novedades del depuradorEn primer lugar tenemos que anunciar la vuel-

ta al depurador de una de las características clási-cas de Visual Basic: Editar y Continuar, ahora tam-bién disponible para C#. Sí en efecto, volvemos acontar en el IDE con la posibilidad de modificar elcódigo al mismo tiempo que lo estamos depuran-do, lo que supone un importante aumento de pro-ductividad, evitando en muchas ocasiones tener quecancelar la ejecución, modificar y volver a ejecutar,con el retraso que ello supone en el tiempo globalde desarrollo.

Respecto a la consulta de información en tiempode depuración, tenemos como novedad los Data Tips,consistentes en una viñeta flotante que visualiza los valo-res contenidos en los miembros de una clase propia ode la plataforma .NET. Tan sólo hemos de situar elratón sobre la variable que alberga el objeto, y el datatip con su contenido será visualizado. Adicionalmente,también tenemos visualizadores en diferentes forma-tos para estos valores, dependiendo de cuál sea el valorque estamos consultando; si hay un visualizador dispo-nible lo sabremos porque a su lado aparece un icono delupa. Ver la figura 11.

Cuando se produce un error en tiempo de ejecu-ción, entra en acción el “Asistente de Excepciones”,una estupenda herramienta que muestra un cuadro dediálogo con la descripción de la excepción, una listade posibles soluciones, y acceso a un completo deta-lle del problema, a la documentación de .NET, etc.Ver la figura 12.

Cerrando el IDEY esta ha sido la relación de primicias más remar-

cables con las que desembarca el nuevo y flamanteVisual Studio 2005. Como hemos comentado alcomienzo de este artículo, hay muchas más, entrelas que podríamos mencionar de forma breve, lacapacidad de la ventana “Inmediato” para evaluarexpresiones en tiempo de diseño; la nueva ventana“Error List”, que muestra los errores producidos,por lo que ya no se usa la ventana “Task List” paraeste menester; los atributos del depurador, que per-miten personalizar el modo en el que el depuradorvisualiza la información; el nuevo sistema de ayu-da, con capacidades mejoradas de búsqueda, alma-cenamiento para entradas favoritas de la documen-tación, etc.

En definitiva, una nueva versión de un granentorno de desarrollo de aplicaciones, que poten-cia nuestra capacidad de trabajo al tiempo que lasimplifica.

dotN

etM

anía

<<

63

dnm.plataforma.net<<

Figura 10

Figura 11

Figura 12

Page 64: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Novedades en la extensibilidad deVisual Studio 2005

Como no podía ser menos,Visual Studio 2005 introduce muchas mejoras en su mode-lo de extensibilidad que permiten crear complementos de forma mucho más sencilla,sin las complicaciones innecesarias de antaño.

<< Microsoft ha escuchado a los desarrolla-dores de complementos (add-ins) que hemos esta-do “quejándonos” durante los últimos tres años delas complicaciones, a nuestro juicio innecesarias,que tenían los complementos de Visual Studio.NET 2002/2003 y, por fin, en esta nueva versiónde Visual Studio la creación de complementos seha simplificado notablemente y se han introducidointeresantes mejoras. Estas complicaciones eranconsecuencia de la tecnología COM (ActiveX) quehereda el IDE de Visual Studio actual de sus ver-siones 5.0 y 6.0 de finales de los 90 (recordemosque Visual Studio 2005 sigue sin ser una aplicación.NET). No sólo eso, sino que los bugs más indese-ables del modelo de extensibilidad han sido corre-gidos. Para los lectores que no lo sepan, el nuevositio Web “MSDN Product Feedback Center”(http://lab.msdn.microsoft.com/productfeedback) per-mite enviar sugerencias y bugs a los equipos de desa-rrollo de los productos de Microsoft (no a todostodavía), y funciona realmente bien, con respues-tas rápidas (al menos durante las fases beta de losproductos).

Nuevo IDE,nuevos ensambladosLo primero que llama la atención del proyecto gene-

rado por el asistente para la creación de complemen-tos (menú “Nuevo proyecto”, nodo “Otros tipos deproyectos”, “Extensibilidad”) es que algunas de las refe-rencias han cambiado de nombre y de versión:

• El ensamblado EnvDTE.dll, que contiene la mayorparte del modelo de extensibilidad de Visual Studioahora tiene la versión 8.0.0.0, aunque contiene

idéntica funcionalidad al anterior EnvDTE.dll ver-sión 7.0.3300.0.

• El ensamblado EnvDTE80.dll, nuevo en esta ver-sión, contiene toda la funcionalidad nueva queMicrosoft ha añadido en Visual Studio 2005.Han preferido hacerlo así, con dos ensambla-dos, para no correr riesgos de romper la com-patibilidad hace atrás modificando el ensam-blado EnvDTE.dll.

• El ensamblado Office.dll, que contenía la funcio-nalidad de barras de botones prestada de MicrosoftOffice, ha sido reemplazado por el nuevo ensam-blado Microsoft.VisualStudio.CommandBars.dll. Hanhecho esto para tener un ensamblado más pequeñoque contenga sólo lo necesario para las barras debotones de Visual Studio, sin elementos innecesa-rios que contenía la DLL de Microsoft Office.

Aparte de estos ensamblados que el asistente aña-de como referencias, existen otros dos que, depen-diendo de la funcionalidad de nuestro complemento,necesitaremos añadir:

• El ensamblado VSLangProj80.dll, que contienela extensibilidad específica de los proyectos deVisual Basic .NET y C# (Visual Studio .NET2002 proporcionaba el ensamblado VSLangProj.dll,y Visual Studio .NET 2003 proporcionabaVSLangProj2.dll).

• El ensamblado VsWebSite.Interop.dll, nuevo enesta versión, proporciona la extensibilidad espe-cífica para el nuevo modelo ASP.NET 2.0, que eli-mina la necesidad de archivos de proyecto paraaplicaciones Web y considera como sitio Web todoel contenido de un directorio.

Carlos Quintero

dnm.plataforma.net

Es evidente que

Carlos J.Quinteroes Microsoft MVP de .NET desdeprincipios del año 2004. Es autor

del popular complemento MZ-Tools 3.0 para VB6,VB5 y VBA, y

de MZ-Tools 4.0 para VisualStudio .NET 2002/ 2003, ambos

disponibles enhttp://www.mztools.com

Page 65: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Nuevo registro de complementos

Entre los archivos generados por el asistente, hayotro que llamará nuestra atención: el que tiene la exten-sión .addin. Como explicamos en el número 18 dedotNetManía, los complementos de Visual Studio .NET2002 o 2003 tenían que ser registrados de dos maneras:

• Como componente ActiveX, usando COM Interop(regasm.exe o equivalente): por fin, este paso ya noes necesario, y es que no tenía mucho sentido que,siendo un ensamblado .NET, hubiera que registrarla DLL del complemento como componente ActiveXpara que Visual Studio la pudiera encontrar y cargar.

• Como complemento de Visual Studio, para que aparez-ca en el Administrador de Complementos: esto sehacía añadiendo unas entradas en el registro deWindows (HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\7.1\AddIns para Visual Studio .NET2003) pero ahora se puede hacer a través de un archi-vo XML con extensión .addin ubicado en unas car-petas determinadas. Visual Studio 2005 busca archi-vos con la extensión .addin en las carpetas que apa-recen en el diálogo que se muestra pulsado el menú“Herramientas”, “Opciones”, nodo “Seguridad decomplementos/macros”. La figura 1 muestra dichodiálogo (tomado de la versión inglesa de Visual Studio2005). Como podemos observar, hay varias carpetasdonde Visual Studio 2005 buscará los archivos conla extensión .addin. Unas carpetas son específicaspara el usuario de la sesión de Windows (las quecomienzan por %USERPROFILE% o %VSAPPDATA%), por loque un archivo .addin en dicha carpeta hará que elcomplemento sólo esté disponible para ese usuario,

y otras son para todos los usuarios (por ejemplo, lasque comienzan con %ALLUSERSPROFILE% o %VSCOMMO-NAPPDATA%). Habrá que tener esto en cuenta a la horade crear el setup para nuestro complemento.

Por supuesto, se pueden seguir usando las formasanteriores de registrar un complemento, pero la nue-va forma de registro es mucho más fácil. El archivocon la extensión .addin es un archivo XML cuyo con-tenido es como el que se muestra en el fuente 1.

Como podemos ver, las etiquetas XML dentro de laetiqueta <AddIn> son similares a las entradas que tenía-mos que añadir al registro de Windows para registrarnuestra DLL como complemento de Visual Studio,excepto la etiqueta <Assembly>, que permite especificarel nombre de la DLL, y la etiqueta <FullClassName>, quepermite especificar la clase del complemento que imple-menta el interfaz IDTExtensibility2, necesario para car-gar un complemento. Esta información antes se obteníaregistrando el complemento como componente COM.Las etiquetas dentro de la etiqueta <HostApplication>son las que permiten saber cuál es el host para el que estápensado el complemento, que en nuestro caso seráMicrosoft Visual Studio, versión 2005 (8.0).

En realidad hay dos archivos con la extensión .addin:uno reside en la propia carpeta del código fuente, y estáahí para que siempre acompañe al código fuente cuan-do se mueva la carpeta del proyecto a otra ubicación uordenador, o se introduzca el proyecto en un sistema decontrol de código fuente como SourceSafe; el otro resi-de en la carpeta C:\Documents and Settings\<user>\Misdocumentos\Visual Studio 2005\Addins y es el que seemplea durante el desarrollo para que el Administradorde Complementos de Visual Studio lo muestre.

Nuevas clases del modelo de objetosComo hemos dicho, toda la nueva funcionalidad de

la extensibilidad de Visual Studio 2005 reside en el ensam-blado EnvDTE80.dll. Si examinamos este ensamblado con

dotN

etM

anía

<<

65

dnm.plataforma.net<<

Figura 1

<?xml version="1.0" encoding="UTF-16" standalone="no"?><Extensibilityxmlns="http://schemas.microsoft.com/AutomationExtensibility">

<HostApplication><Name>Microsoft Visual Studio</Name><Version>8.0</Version>

</HostApplication><Addin>

<FriendlyName>MyAddin</FriendlyName><Description>MyAddin</Description><Assembly>MyAddin.dll</Assembly><FullClassName>MyAddin.Connect</FullClassName><LoadBehavior>0</LoadBehavior><CommandPreload>0</CommandPreload><CommandLineSafe>0</CommandLineSafe>

</Addin></Extensibility>

Fuente 1

se pueden seguir usando las formasanteriores de registrar un

complemento, pero la nueva forma de registro es mucho más fácil

Page 66: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

el Examinador de Objetos, veremos quetiene muchas clases y métodos que ter-minan en “2”, para diferenciarlos de losdel ensamblado anterior EnvDTE.dll. Laclase más importante es EnvDTE80.DTE2, yes que ahora el parámetro applicationdelmétodo OnConnection del complemento,del tipo Object, se puede convertir al tipoEnvDTE80.DTE2que tiene los mismos méto-dos y propiedades del antiguo EnvDTE.DTE,y otros nuevos que se han añadido en estaversión. Algunos métodos han cambiadode “firma” (signature), en especial los rela-cionados con botones y barras de boto-nes. Por ejemplo, la propiedad DTE2.CommandBars ya no devuelve un objeto deltipo Microsoft.Office.Core.CommandBarscomo ocurría antes, ni siquiera del tipoMicrosoft.VisualStudio.CommandBars.Com

mandBars del nuevo ensamblado para lasbarras de comandos como cabría esperar,sino que devuelve el tipo Object. SegúnMicrosoft, esto es necesario para algunasoptimizaciones internas de Visual Studio.El caso es que deberemos hacer una con-versión de tipos que antes no era necesaria.

La lista de nuevas clases y métodos esbastante larga, por lo que no la vamos adetallar aquí. Baste mencionar que otra delas novedades más interesante son los nue-vos eventos TextDocumentKeyPressEvents.BeforeKeyPressy TextDocumentKeyPressEvents.AfterKeyPress, también muy demandados,ya antes sólo era posible detectar cambiosen el código fuente al cambiar de línea,

pero ahora podemos hacerlo a nivel de pul-sación de tecla. Y por fin parece que elmodelo de código (FileCodeModel) es másconsistente entre los distintos lenguajes deprogramación (Visual Basic, C#, Visual J#)y los métodos para añadir código (funcio-nes, parámetros, etc.) ya funcionan entodos los lenguajes, tal vez porque los useel nuevo diseñador de clases de algunasversiones de Visual Studio 2005.

Nuevos tipos de botonesComo se aprecia inmediatamente al

ver Visual Studio 2005 por primera vez,sus botones son ahora “más bonitos”,como los de Microsoft Office 2003, ya queusan bitmaps TrueColor y no los bitmapsde 16 colores de las versiones anteriores.Esto significa que si no queremos quenuestro complemento “desentone”, ten-drá que usar unos bitmaps que sean igualde vistosos, usando TrueColor. Aparte deesta mejora estética, en Visual Studio 2005podemos crear nuevos tipos de botones,

mientras que antes estábamos limitados alos botones de pulsar solamente. Por ejem-plo, ahora podemos crear controles deltipo ComboBoxo TextBox en nuestras barrasde botones, o usar botones desplegablescomo las listas Most Recently Used (MRU).Para ello se emplea el nuevo métodoEnvDTE80.Commands2.AddNamedCommand2,que proporciona nuevos parámetros paraespecificar el tipo de control que se crea-rá en las barras de botones a partir delcomando.

Por otro lado, la nueva claseEnvDTE80.Window2 expone una nueva pro-piedad CommandBars que da acceso a lasbarras de botones de las toolwindows deVisual Studio 2005, algo que antes no eraposible. El fuente 3 muestra el códigofuente de un complemento que añade unbotón a la barra de botones del Exploradorde Soluciones. Este botón podría realizaralguna función útil dentro de dicha ven-tana, por ejemplo, contraer los proyectosde la solución (esto se deja como ejercicioal lector).

dotN

etM

anía

<<

66

dnm.plataforma.net<<

Private Const m_NOMBRE_COMANDO As String = "MiComando"

Private m_objDTE2 As DTE2Private m_objAddIn As AddInPrivate m_objCommandBarControl As CommandBarControl

Public Sub OnConnection(ByVal application As Object, _ByVal connectMode As ext_ConnectMode, ByVal addInInst As Object, _ByRef custom As Array) Implements IDTExtensibility2.OnConnection

Dim objWindow2 As Window2Dim colCommandBars As CommandBarsDim objCommandBar As CommandBarDim objCommand As Command = Nothing

m_objDTE2 = CType(application, DTE2)m_objAddIn = CType(addInInst, AddIn)

Select Case connectModeCase ext_ConnectMode.ext_cm_AfterStartup, ext_ConnectMode.ext_cm_Startup

Try' Intenta recuperar el comando del add-in, por si ya está creadoobjCommand = m_objDTE2.Commands.Item(m_objAddIn.ProgID & "." & m_NOMBRE_COMANDO)

Catch

Fuente 2 (Continua...)

Otra de las novedades más interesante son los nuevoseventos TextDocumentKeyPressEvents.BeforeKeyPress y

TextDocumentKeyPressEvents.AfterKeyPress

Page 67: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

dotN

etM

anía

<<

67

dnm.plataforma.net<<

End TryTry

' Si el comando del add-in no está creado, lo creaIf objCommand Is Nothing Then

objCommand = m_objDTE2.Commands.AddNamedCommand(m_objAddIn, _m_NOMBRE_COMANDO, "Mi comando", "Mi comando", True, 59)

End If

' Obtiene la ventana del Explorador de solucionesobjWindow2 = CType(m_objDTE2.Windows.Item(EnvDTE.Constants.vsWindowKindSolutionExplorer), Window2)

' Obtiene su barra de comandoscolCommandBars = DirectCast(objWindow2.CommandBars, CommandBars)objCommandBar = colCommandBars.Item("Explorer")

m_objCommandBarControl = CType(objCommand.AddControl(objCommandBar), CommandBarControl)

Catch ex As ExceptionSystem.Windows.Forms.MessageBox.Show(ex.ToString)

End Try

End Select

End Sub

Public Sub OnDisconnection(ByVal disconnectMode As ext_DisconnectMode, _ByRef custom As Array) Implements IDTExtensibility2.OnDisconnection

TryIf Not (m_objCommandBarControl Is Nothing) Then

m_objCommandBarControl.Delete()End If

Catch ex As ExceptionMessageBox.Show(ex.ToString)

End Try

End Sub

Public Sub QueryStatus(ByVal CmdName As String, _ByVal NeededText As EnvDTE.vsCommandStatusTextWanted, _ByRef StatusOption As EnvDTE.vsCommandStatus, _ByRef CommandText As Object) Implements EnvDTE.IDTCommandTarget.QueryStatus

TryIf CmdName = m_objAddIn.ProgID & "." & m_NOMBRE_COMANDO Then

StatusOption = vsCommandStatus.vsCommandStatusSupported Or vsCommandStatus.vsCommandStatusEnabledEnd If

Catch ex As ExceptionMessageBox.Show(ex.ToString)

End Try

End Sub

Public Sub Exec(ByVal CmdName As String, _ByVal ExecuteOption As EnvDTE.vsCommandExecOption, _ByRef VariantIn As Object, ByRef VariantOut As Object, _ByRef handled As Boolean) Implements EnvDTE.IDTCommandTarget.Exec

TryIf CmdName = m_objAddIn.ProgID & "." & m_NOMBRE_COMANDO Then

MessageBox.Show(CmdName & " ejecutado.")End If

Catch ex As ExceptionMessageBox.Show(ex.ToString)

End Try

End Sub

(...continuación ) Fuente 2

Page 68: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

También se ha eliminado la necesi-dad de tener que usar Visual C++ paracrear la DLL satélite que proporcionalos bitmaps para los comandos de nues-tro complemento. Aunque sigue siendonecesaria una DLL satélite (parece queno, Microsoft no ha escuchado aún lasugerencia de eliminarla o hacerlaopcional), ahora se puede usar una DLL“manejada” (no nativa Win32) creadausando Visual Basic .NET o C# a la queañadiremos nuestros recursos de tipobitmap.

No más shim control para tool-windows

Aunque habíamos hablado en algúnartículo anterior de las toolwindows, esasventanas que se adhieren a los bordes deVisual Studio (como la Lista de Tareas oel Explorador de Soluciones), no había-mos explicado cómo crear nuestras pro-pias toolwindows para nuestro comple-mento, y por una buena razón: era tre-mendamente complicado. La forma decrear toolwindows era usando la funciónDTE.Windows.CreateToolwindow, que reci-be como parámetros la instancia del com-plemento, el ProgID del control ActiveXque se alojará en la ventana (el conteni-do de estas ventanas se proporcionamediante un control de usuario), un GUIDque identificará la toolwindow, y el cap-tion de la ventana. Haciendo un poco dehistoria, en Visual Basic 5.0 o 6.0, don-de todo era ActiveX, no había problema:nuestro complemento podía tener uncontrol de usuario que era registradocomo componente ActiveX, y se pasabasu ProgID a esa función. Pero en VisualStudio .NET 2002 y 2003 surgió el pro-blema: mientras que nuestros comple-mentos eran DLL .NET con controlesde usuario que no eran ActiveX, la fun-ción CreateToolWindow exigía que se pasa-ra un control ActiveX. La “solución” deMicrosoft, un tanto peculiar, fue pro-porcionar a través de uno de los ejem-plos de su sitio Web (ni siquiera era pro-porcionado por Visual Studio .NET) uncontrol ActiveX llamado shim control queera el que se le pasaba a dicha función.Dicho control, escrito en C++ con tec-nología ATL ininteligible para el desa-rrollador típico de Visual Basic, tenía una

función que había que llamar para alojarnuestro control de usuario .NET. Esteshim control ha sido causa de innumera-bles quebraderos de cabeza para los desa-rrolladores de complementos, ya queMicrosoft liberó 3 versiones del mismo,algunas no oficiales, que corregían pro-blemas con los aceleradores de teclado(la tecla [&] en una etiqueta para acce-der a un control) y requería que cadadesarrollador cambiase los diversosProgID y CLSID que empleaba este con-trol ActiveX para que no entrase en con-flicto con los controles shim de otroscomplementos. Después de esta compli-cada explicación, otra buena noticia: aho-ra crear toolwindows es muy fácil: ya no

hace falta el shim control ni ActiveX. Paraello, se emplea la nueva funciónEnvDTE80.Windows2.CreateToolwindow2.Esta función, como la antigua, recibecomo parámetros la instancia del com-plemento, un GUID identificador, el cap-tion de la ventana, y como nuevos pará-metros, el ensamblado y la clase del con-trol de usuario .NET que queremos alo-jar en la ventana. El fuente 4 muestracómo crear una toolwindow en nuestrocomplemento que aloja un control deusuario llamado UserControl1.

Con esto finalizamos este artículosobre las novedades en la extensibilidadde Visual Studio 2005. Como siempre,el Examinador de Objetos nos ayudará aexplorar todas sus posibilidades, aunqueconviene indicar que la documentaciónde Microsoft en MSDN sobre este tema[1] ha mejorado mucho y ahora es másdetallada que antes, por lo que convieneempezar por ahí.

dotN

etM

anía

<<

68

dnm.plataforma.net<<

Public Sub OnConnection(ByVal application As Object, _ByVal connectMode As ext_ConnectMode, ByVal addInInst As Object, _ByRef custom As Array) _Implements IDTExtensibility2.OnConnection

Dim colWindows2 As Windows2Dim objWindow As WindowDim objUserControl As ObjectDim objAssembly As System.Reflection.Assembly

_applicationObject = CType(application, DTE2)_addInInstance = CType(addInInst, AddIn)

Select Case connectModeCase ext_ConnectMode.ext_cm_AfterStartup, ext_ConnectMode.ext_cm_Startup

TrycolWindows2 = DirectCast(_applicationObject.Windows, Windows2)objAssembly = System.Reflection.Assembly.GetExecutingAssembly()objWindow = colWindows2.CreateToolWindow2(_addInInstance, _

objAssembly.Location, _"MiAddin.UserControl1", "Mi ventana", _"{5FD1A8D8-26B1-4ed2-97D9-9CB8160CD8D3}", objUserControl)

objWindow.Visible = TrueCatch ex As Exception

System.Windows.Forms.MessageBox.Show(ex.ToString)End Try

End SelectEnd Sub

Fuente 4

Bibliografía

[1]“Automation and Extensibility for Visual

Studio”,http://msdn2.microsoft.com/library/xc52cke4(en-us,vs.80).aspx

Este artículo se ha escrito usando la versión Visual Studio 2005 Community Technology Preview (CTP) de Junio de 2005,que es posterior a la Beta 2.Es posible que algunascosas explicadas en el artículo, así como la documentación, varíen en la versión final.

Otra buena noticia: ahoracrear toolwindows es muy

fácil, ya no hace falta el shimcontrol ni ActiveX

Page 69: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-
Page 70: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

.NET Compact Framework 2.0

Con la aparición de Visual Studio .NET, y con él .NET Compact Frameworksurgió un nuevo conjunto de herramientas, bajo código administrado, para eldesarrollo de dispositivos móviles. Si bien es cierto que con la aparición de.NET Compact Framework 1.1 SP3 se consiguió un marco más trabajado, aho-ra con .NET Compact Framework 2.0, además se amplia.

<<.NET Compact Framework (.NET CF a partir

de ahora) forma parte de .NET Framework con loque muchas de las mejoras ofrecidas en .NETFramework también están disponibles para .NET CF.Obviamente, la limitaciones de este modelo de desa-rrollo hace que ciertas clases o métodos, propiedadeso eventos de las mismas no estén disponibles. Pese aello, tanto la cantidad de nuevas características, comola mejora del rendimiento, son notables.

.NET CF ocupa 1,55 Mb (ROM) en Pocket PC2002 y anteriores y 1,35 Mb (ROM) en Pocket PC2003 y superiores. Los requisitos de memoria en elterminal son de 0,5 Mb RAM, con un tamaño de apli-cación que oscila entre los 5Kb y los 100 Kb, en lamayoría de los casos. Es compatible con dispositivosPocket PC y Smartphone con Windows Mobile 2003Second Edition, Windows CE .NET 4.x y 5.0, que-dando para próximas versiones la edición PhoneEdition. La velocidad del motor de ejecución del CLRes mayor, así como de las librerías más utilizadas comoXML o ADO.NET.

En la versión anterior –y quien haya desarrolladosobre la misma lo sabe– muchas de las ventajas de.NET Framework no estaban disponibles y eran muyfrecuentes las llamadas mediante Platform Invoke(P/Invoke) directamente a las API del sistema opera-tivo. La interoperabilidad COM o COM Interop, quetan grandes ventajas hemos obtenido desde .NETFramework, ya sea dentro de un marco de migracióno de un contexto de interoperabilidad, desde .NETCF 1.x no estaba disponible. Esto hacía que dichoscomponentes COM que por un lado o bien teníamos

desarrollados de versiones anteriores o bien utilizá-bamos de componentes de otro tipo (por ejemplo, elacceso a Pocket Outlook Object Model), nos veíamos obli-gados a crear una librería de “llamada puente” o wrap-per como se conoce en inglés, que interactuara conlos componentes COM para la llamada desde códigoadministrado. Pues bien, COM Interop es una de lasnovedades de .NET CF 2.0, aunque no estará tanextendida como en .NET Framework y entre otrasmejoras se han extendido los Type Marshaling, connuevos tipos y tipos “embebidos”.

De la misma forma, el simple acceso al registrodel sistema o a los puertos COM derivaban en unallamada P/Invoke a la API, ahora, .NET CF 2.0 pro-vee la clase RegistryKey para el acceso al registro, ypuede utilizar las clases de .NET Framework para elacceso a los puertos serie.

La seriación es también una de las gratas noveda-des, así como el pleno soporte a las nuevas caracterís-ticas de Microsoft SQL Server 2005 Mobile Edition eincluso a la seguridad, transaccionalidad y eficacia delos servicios de mensajería MSQS (Message Queuing).A nivel de seguridad, también remarcar el soporte a lacriptografía y a los certificados X509, la relación entreensamblados a través del atributo Friend Assembly ysoporte a la autenticación NTLM e IPv6, la próximageneración de protocolos para Internet.

Para las aplicaciones desarrolladas con .NET CF1.x, podremos ejecutarlas en dispositivos con .NETCF 2.0 configurándolo de manera explícita, sin nece-sidad de modificar código. Para migrar las aplicacio-nes de .NET CF 1.x a .NET CF 2.0, Visual Studio2005 ofrece una Upgrader, que permite migrar auto-máticamente mediante un asistente.

José Miguel Torres

dnm.laboratorio.net

Novedades .NET Compact Framework 2.0

José Miguel Torrescolabora habitualmente con

dotNetManía. Es técnicosuperior en desarrollo de

aplicaciones informáticas ytrabaja como arquitecto de

software en el departamento detecnologías de la

información de MRW

Page 71: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Visual Studio 2005

Visual Studio 2005 es también la evolución deeMbedded Visual C++ 4.0 (eVC++). De esta forma, den-tro del entorno de desarrollo de Visual Studio 2005podremos trabajar tanto con nuestros antiguos pro-yectos de Visual Studio .NET 2003 como los desa-rrollados en eVC++ 4.0; además podremos tenerlosen una misma solución.

La principal característica es que el desarrollo de dis-positivos móviles es independiente de .NET Framework,esto es, .NET CF 2.0 tiene su propio SDK y cualquierproyecto Mobile, puede ser compilado desde la línea decomandos de Visual Studio 2005. Incluye también, nue-vas características orientadas sobre todo a la productivi-dad. En resumen, aporta lo mejor de Visual Studio .NET2003 y eVC++ 4.0, todo en un mismo producto.

Con Visual Studio 2005 podemos desarrollar paratres tipos de plataformas: SmartPhone, Pocket PC,Windows CE, inicialmente puesto que con la instalacióndel SDK de PocketPC 5.0 y Smartphone 5.0 se añadenPocket PC Magneto y Smartphone Magneto respecti-vamente. En cada una de las plataformas podemos selec-cionar el tipo de aplicación que deseemos, ya sea deWindows Forms, de librería de clases, aplicación de con-sola (o aplicación no gráfica). Sí, han leído bien, en estaversión existe soporte integrado para Smartphone, sinnecesidad de instalar ningún tipo de SDK. Además, pode-mos cambiar el tipo de aplicación ya creada de Consola,por ejemplo, a Windows Forms, al menos, con mayorfacilidad que antes.

Al crear un nuevo proyecto, lo que más llama laatención es que los formularios sobre los que se dise-ña son, en cuanto a apariencia y funcionalidad, comolos que se ejecutan en tiempo de ejecución, así, en unproyecto Smartphone, podemos saber exactamente laapariencia y posición, de un ComboBox (figura 2), entiempo de diseño. Esto es lo que con el término inglésconocemos como what you see is what you get. Ademásesta funcionalidad tiene un motivo extra, y es que conla aparición de Windows Mobile 5.0, la resolución de

las PDAs pueden variar, así, podemos encontrarnoscon terminales con resoluciones de 240x320 hasta480x640 pasando por 480x480.

De esta manera, la importancia del alineamiento delos controles para la flexibilidad de aplicaciones que pue-dan ser utilizadas bajo distintas resoluciones se solucio-na con el soporte conocido en .NET Framework comoanchoring y docking. El funcionamiento de estas dos pro-piedades es exactamente igual que en .NET Framework.

Una de las curiosidades que más me ha llamado laatención, es que en arrastrar un control originario de laplataforma PocketPC a una proyecto bajo plataformaSmartphone, Visual Studio 2005, automáticamente, ofre-ce controles apropiados para Smartphone que lo sustitu-yan (si en Smartphone no existe o no está soportado dichocontrol) ajustándolo al tamaño de la pantalla.

Existe un nuevo tipo de aplicación, el Control Library.Este tipo permite crear un control personalizado, agre-garlo a la barra de herramientas y hacer uso de él den-tro cualquier proyecto compatible. En versionesanteriores, la creación de un control personaliza-do era posible aunque no era visual.

Otras novedades a remarcar son las que pode-mos encontrar en proyectos de Windows Forms oWeb. Tanto las herramientas de testeo, conexióna Team Foundation Server así como al Snippets CodeManager. Podemos echar mano de los diagramasde sistemas distribuidos y mantener la documen-tación del proyecto “al día” con los diagramasUML iniciales.

Novedades en Windows FormsEntre las novedades, destacar que se ha mejo-

rado significativamente el soporte gráfico de losformularios en cuanto a la seriación de bitmaps(como objeto), es decir la posibilidad de grabarlosen ficheros, soporte para iconos de alta resolucióno soporte de degradado de color para fondo delformulario. Se ha añadido la capacidad de que

dotN

etM

anía

<<

71

dnm.laboratorio.net<<

Figura 1. Plataformas y tipos de aplicación disponibles.

Figura 2. Las posibilidades en tiempo de diseño de VisualStudio 2005 son extraordinarias.

Figura 3. .NET CF,ofrece la posibilidad de

creación de controles deusuarios.disponibles.

Page 72: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

.NET CF pueda destruir el formularioprincipal cuando éste se cierre. Soportepara DirectX y Direct3D (aunque sóloestará disponible para versiones posterio-res de Windows Mobile). Se han añadi-do características específicas para las pla-taformas Pocket PC y Smartphone, encuanto a controles se refiere (ver tabla 1y figura 3).

Debido al la multi-resolución que ofre-cerá Windows Mobile 5.0, y además de laspropiedades anchoring y docking, comenta-das anteriormente, los formularios seránAuto-Scrollables. Además tendremos acce-so al portapapeles del sistema y a eventosdel teclado de los dispositivos.

EmuladoresVisual Studio2005, ofrece una mayor

cantidad de emuladores con unas carac-terísticas mejoradas y nuevas. Los emula-dores ofrecerán soporte para ActiveSync,con lo que será posible conectarlos al escri-torio y sincronizándolos como si de undispositivo físico se tratara, la cual cosafacilitará las aplicaciones RAPI. Asimismola cantidad de puertos COM aumentará

hasta cuatro.Los nuevos emula-

dores podrán compar-tir carpetas. Hasta aho-ra el intercambio deficheros se realizabadesde el ordenadorescritorio compartien-do una carpeta y desdeel emulador obtenía-mos los ficheros; enesta versión, la com-partición de carpetas yficheros es bidireccio-

nal. Como comenté anteriormente, conla introducción de Windows Mobile 5.0,la resolución de los dispositivos podrácambiar y, por tanto, los emuladoresharán lo mismo; podremos configurartanto la resolución como la orientaciónde la pantalla.

Visual Studio 2005 y WindowsMobile 5.0 SDK suministrarán 15 emu-

ladores distintos, por loque además se incorpo-rará una nueva herra-mienta de administraciónde emuladores conocidacomo Device EmulatorManager (DEM). Ade-más DEM es una piezafundamental para lacomunicación entreActiveSync y los emulado-res ya que en ella recae-rá la responsabilidad deconexión y desconexiónentre ambos.

Visual Studio 2005 + WindowsMobile 2005 + SQL Mobile2005 = Un nuevo escenario

.NET Compact Framework siguecreciendo y ampliándose. Cada vez sonmás los controles y clases que resuelveno facilitan las tareas de su versión ante-rior, y eso es de agradecer. Pero el autén-tico potencial de .NET CF 2.0 está liga-do tanto a SQL Mobile 2005 como aWindows Mobile 2005. .NET CF 2.0,bajo sistemas operativos WindowsMobile 2005, además de todo lo men-cionado (incluyendo el soporte paraDirectX y Direct3D), contendrá libre-rías para el acceso a Pocket Outlook

Object Model bajo código administra-do, pudiendo acceder a contactos,correo electrónicos, mensajes SMS, sinnecesidad de COM Interop. Contendrálibrerías también administradas paratelefonía, pudiendo tener el control dellamadas y tiempos, por ejemplo. Unadministrador de dispositivo (DeviceManagement) que promete hacer apar-car el código nativo para el acceso a con-figuraciones del sistema sin tener queechar mano de las API, mediante elobjeto de configuración del sistema(Configuration System Object).

Como ven se nos presenta un granabanico de posibilidades, en cuanto alnuevo motor de acceso a datos, comode nuevas características del nuevo sis-tema operativo, que hace que .NET CF2.0 no sea más que un importante mar-co de desarrollo hacía una nueva eraorientada a la programación adminis-trada en el desarrollo de dispositivosmóviles en plataforma Microsoft.

Más información: http://www.desa-rrollomobile.net/dotNetMania/dotNETCF2005

dotN

etM

anía

<<

72

dnm.laboratorio.net<<

Clase Descripción

Notification Muestra y responde a notificaciones de usuario.

DocumentList Muestra y gestiona documentos o archivos.

HardwareButtonClase específica de Pocket PC,para la utilización de botones de hard-ware de dichos dispositivos.

InputMethodCollectionPermite el acceso a todos los tipos de acceso disponibles del dispo-sitivos (InputPanel, Keyboard…)

InputMode Clase específica de SmartPhone,para tipo de acceso AlphaABC,T9,etc.

LogFont Proporciona efectos de texto.

Mobile Device Permite manejar el evento Hibernar.

ScreenOrientationA partir de Windows Mobile 2003 SE, esta clase permitirá la orien-tación de la pantalla en grados (90-180-270).

Tabla 1.Nuevas clases en Microsoft.WindowsCE.Forms

Figura 4. La creación de nuevos controles se ha orientado a lasnecesidades reales y específicas de cada plataforma.

Figura 5. Device Emulator Managerfacilitará la configuración de los

emuladores.

Figura 6. Nuevos Componentesadministrados con Windows Mobile 5.0.

Page 73: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-
Page 74: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

ADO.NET 2.0Más y mejor acceso a datos

Ya está a la nueva versión de .NET Framework.Y no es una simple mejora dela anterior, sino que evoluciona de nuevo añadiendo más y mejores herramientasa la par que optimiza las ya existentes.Y es que se ve que ocurre una interac-ción perfecta entre comunidad de desarrolladores y Microsoft que nunca antesse había visto.

<< propuestas, implementadas; muchascorrecciones propuestas y realizadas; y muchas noveda-des deseadas, e implementadas para dar soporte al futu-ro de los productos de Microsoft desarrollados sobre estaplataforma. El resultado, un Framework más estable –sicabe–, robusto –que ya lo era mucho– y potente –másclases que nunca– que el anterior.

Sincronizando la salida del Framework 2.0 con unode los servidores .NET más esperado –Yukon o SQLServer 2005– vienen de serie con las BCL del sistema:las nuevas clases de acceso a datos, ya conocidas comoADO.NET 2.0. Ampliando lo que comentaba en elpárrafo anterior, ADO.NET 2.0 incluye numerosasmejoras de las clases que ya conocemos del Framework1.1; pero que también nos regala numerosas novedadesque harán las delicias de los más fanáticos. Eso unido acambios “estructurales” que no nos habían cuajado de laversión anterior, cierran un círculo que perfecciona aúnmás esta tecnología de acceso a datos de Microsoft.

Se amplían aún más las máximas de Sencillez, pro-ductividad e integración. Con esto se quiere decir quelas mejoras no se reducen a clases nuevas, sino a amplia-ciones de las existentes. Y se reduce aún más el código

del desarrollador, empaquetando aún más funcionalidaden los métodos y propiedades ya conocidos. Pero siem-pre desde la perspectiva de no cambiar lo que ya fun-ciona. Es por esto que las migraciones a ADO.NET 2.0muchas veces pasarán por el mero hecho de recompilarcon los nuevos compiladores y las nuevas versiones. Peroa los que quieran aprovechar el nuevo Framework, esosí, avisarles de que hay muchas e interesantes herra-mientas. Veámoslas poco a poco…

Proveedores .NET y conexiones a datosEsto ya os suena a todos. Pero recordemos que en el

Framework 1.1 existían unos pequeños flecos. Flecosque seguro a más de uno no os han afectado, pero a losque nos dedicamos a las arquitecturas de software noshan supuesto en algunos casos –y aunque existían otrasalternativas– auténticos dolores de cabeza. Cosas comoinformación de metadatos del sistema, afinidad de lastransacciones, carga dinámica de proveedores, abstrac-ción de conexiones… y pocas cosas más, que se hanresuelto con éxito en esta nueva versión.

Proveedores .NET: Interfaces,abstracción y factorí-as de clases

En primer lugar a los proveedores .NET.Recordad que son el conjunto de “drivers” que noscomunican con los sistemas gestores de datos de undeterminado fabricante. De esta forma, SQL Servercuenta con un proveedor nativo .NET encapsula-do en el espacio de nombres System.Data.SqlClient;los conectores de compatibilidad con OleDb estánen System.Data.OleDb; en uno de los número ante-riores de dotNetManía se hablaba de los recien-

Pepe Hevia

dnm.ado.net

Muchas mejoras

Pepe Heviacolabora habitualmente con

dotNetManía. Es arquitecto desoftware senior en Alhambra-

Eidos.Tiene las certificaciones deMCAD,MCSD.NET y MCT en

.NET Framework.Ha escritovarios libros sobre la plataforma

.NET (lalibreriadigital.com)

NOTA

ADO.NET 2.0 lejos de mantener el sta-tus quo,ha mejorado sus herramientas a lapar que ofrece multitud de novedades quesimplificarán el desarrollo de los sistemasde n-capas.Y, como no, proporciona unasclases que aprovechan al máximo la poten-cia del nuevo SQL Server 2005

[ ]

Page 75: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

tes proveedores de MySQL… y así sucesivamente.Estos proveedores son nativos a .NET y facilitansu portabilidad. El problema, que para manejarloses necesario conocer a priori con qué base de datosqueremos trabajar. Nuestro código dependerá decon qué espacio de nombres trabajemos. Esto bienargumentado no debería ser ningún problema. Peroqué ocurre si queremos que nuestro código de nego-cio sea –hasta cierto punto– independiente del sis-tema gestor. Alternativas: XML, encapsular obje-tos en familias de clases más abstractas, usar inter-faces o crear clases proxy… pero es un follón deanálisis y de código que ya no nos hace tan pro-ductivos en determinadas situaciones. La solucióna esto: los interfaces de ADO.NET y las factorías declases.

Los interfaces de ADO.NET son aquellas especifi-caciones que los ingenieros de Microsoft establecen enel espacio de nombres System.Data –y muchas de lasnovedades en System.Data.Common– para que los fabri-cantes de sistemas gestores puedan implementar susproveedores. De esta forma, cualquiera que sepa cómofuncionan estos interfaces podrá manejar cualquierproveedor .NET. Asimismo, todo un conjunto de cla-ses implementadas de serie en la BCL podrían usarcódigo de terceros gracias a estos interfaces. De hecho,estos interfaces son IDbConnection, IDbTransaction,IDbCommand, IDbParameter, e IDbDataReader así como laclase adaptadora IDbDataAdapter. ¿Os suenan no? Elproblema es que, en muchos casos, estos interfaces sonextendidos por fabricantes que ofrecen más funciona-lidad que la establecida. El problema es que el fabri-cante entonces puede crear nuevos métodos o propie-dades que difieren de este modelo, y esto es lo que nosobliga después a escribir código más específico. Lasolución: en el espacio de nombres System.Data.Commonse han ampliado los interfaces para hacerlos más ricosy abarcar más casos del estándar ANSI SQL. Esto cla-ro, sin perder la compatibilidad hacia atrás, ya que losnuevos requisitos quedan recogidos en las clases abs-tractas DbConnection, DbCommand… etc. Posibilitandoque la sobrecarga de interfaces ofrezcan más funcio-nalidad que antes. Y así, esta pequeña laguna se resuel-ve. Pero, ¿y qué pasa con la independencia delSGBDR?...

Para solucionar esta otra laguna, existen las facto-rías de clases. El problema que siempre nos hemos

encontrado en el uso de proveedores .NET es el dela carga dinámica de proveedores. ¿Por qué? Porquelas clases ADO se almacenan en el GAC y esto impi-de que podamos trabajar de forma directa con el car-gador de clases de .NET. En segundo lugar, las pro-pias cadenas de conexión están ligadas a sus provee-dores, de forma que cada uno escribe estas cadenascomo quiere. Entonces, ¿cómo podemos construir unobjeto proveedor dinámicamente? Pues haciendo queuna clase sea la responsable de ello.

Toda la funcionalidad de la carga de los prove-edores y la complejidad de su inicialización quedaencapsulada en un método público y estático, deforma que la podamos usar sin instanciar ningunaclase. De esta forma, empleando un interfaz de tipoDbConnection y una llamada al método “cargador”nos daría todo el problema resuelto. Esta forma detrabajar es a lo que se denomina factorías de clases.Son clases especiales que tienen constructores públi-cos y estáticos cuya misión es la encapsular la cre-ación de otras clases. Esto quiere decir que emple-ando la clase DbProviderFactory y el cargador

dotN

etM

anía

<<

75

dnm.ado.net<<

Public IDbConnection DameConexion(string fabricante,mCadConexion){

IDbConnection conexion;

if (fabricante.equals("SqlServer"))conexion=new SqlConnection(mCadConexion);

else if(fabricante.equals("Oracle"))conexion=new OracleConnection(mCadConexion);

return conexion;}

Public IdbConnection DameComando(string fabricante,IdbConnexion conex, string comandoSQL)

{IDbCommand comando;

if (fabricante.equals("SqlServer"))comando=new SqlCommand(comandoSQL,conex);

else if(fabricante.equals("Oracle"))comando=new OracleCommand(comandoSQL,conex);

return comando;}

//ejemplo de uso de este tipo de codigo...DbConnection conex=DameConexion("SqlServer");DbCommand comando=DameComando("SqlServer",conex,

"select * from tabla");DbDataReader datos=Commando.ExecuteQuery();

...

Fuente 1. Lo que hemos tenido que hacer con ADO.NET 1.1 –a grandes rasgos, claro–

NOTA

En esta nueva versión,las factorías de cla-ses permitirán el desarrollo de aplicacionesindependientes del proveedor .NET[ ]

Page 76: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

DbProvidersFactory podremos des-preocuparnos de todo esto y reduciral máximo las líneas de código. La cosaestá en que los nuevos proveedoresADO.NET deberán registrarse en unapequeña base de datos de drivers enejecución y dejar que las factorías haganel trabajo por nosotros. El enlace: lacadena de conexión. Ese sencillo stringque usábamos en VB6 y que gracias alcomando “provider=” nos daba todohecho. En en este caso, el código quehemos visto antes (fuente 1) quedaríaresumido en dos partes: una que afec-ta al fichero XML de configuración delensamblado principal y una segundacon el código operativo...

Puesto que el resto de los interfaceshan visto ampliada su funcionalidad, yano tendremos que preocuparnos de cre-ar las clases XxxCommand y sucesivas… yaque las mismas clases factoría ya nos pro-porcionarán sus propios mecanismos decreación de objetos de datos.

Así de simple y así de abstracto.Siento el trabajo que muchos de noso-tros hemos realizado para esto antaño,pero así son las cosas. ¡Mejor!

¡Ah!, y esperad, que aún no acabalo bueno relativo a conexiones.Gracias a las implementaciones de losúltimos estándares ANSI SQL, las cla-ses de conexión nos ofrecerán, en per-fecto formato XML, los metadatosobtenidos de las consultas a las vistasde esquema de los servidores de datos,conocidas como INFORMATION_SCHEMA.Imaginad la comodidad y potencia queesto nos ofrece.

Enumeración de servidores

Esta es una nueva utilidad que nospermitirá poder explotar la detección deservidores a lo largo y ancho de una red.Debido a su utilidad puede que no todoslos proveedores la soporten (por ejem-plo, Oracle que solo cuenta con una basede datos). En el caso de clientes SQLServer, esta utilidad nos dotará de laposibilidad de poder recoger en un obje-to DataTable todos los servidores SQLServer registrados en una red. Sus uti-lidades, están claras.

Esta utilidad se encuentra en la cla-se DbEnumerator. Y será bueno que lepreguntéis a la factoría si el provee-dor que cargáis la soporta o no…Funcionalidades que existen y avisa-dos quedáis.

Constructor de cadenas de conexión

De siempre ha existido una utilidaden OLEDB que permitía a los entornosde desarrollo abrir un cuadro de diálogoque permitía al usuario seleccionar los ser-vidores y sus atributos para abrir una cone-xión –os recomiendo un artículo que escri-bí del tema y que tenéis en mi Webhttp://www.heviatec.net en la sección deartículos–. Este diálogo se puede abrirempleando interop utilizando las clases deservicio de OLEDB. Pero para .NET nocontamos con nada parecido, exceptuan-do una nueva utilidad de ADO:DbConnectionStringBuilder. Mediante estainterfaz podremos crear cadenas de cone-xión personalizadas por el usuario emple-ando propiedades y métodos, sin tenerque preocuparnos por la sintaxis específi-ca de cada proveedor. Esto quiere decirque cada .NET Provider, heredando deesta clase, podrá proporcionar mecanis-mos encapsulados de generación de cade-nas de conexión, reduciendo así los erro-res derivados de la mala gestión de este“pequeño” detalle. No llega a ofrecer uncuadro de diálogo, pero sÍ un potentemecanismo de creación de cadenas deconexión al igual que CommandBuilder

dotN

etM

anía

<<

76

dnm.ado.net<<

<?xml version="1.0" encoding="utf-8" ?><configuration

xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

<appSettings><add key="DbProvider" value="System.Data.SqlClient"/><add key="ConnectionString"

value="Server=localhost;Database=Northwind;Integrated Security=true;"/>

</appSettings></configuration>

Fuente 2. Las factorías de clases permiten la carga dinámica de proveedores .NET a partir de lacadena de conexión.

// Recogemos la cadena de connexion de un fichero de configuraciónstring provstring =ConfigurationSettings.AppSettings.Get("DbProvider");string cadConexion=ConfigurationSettings.AppSettings.Get("ConnectionString");//La factoría de clases nos devuelve el proveedorDbProviderFactory prov =DbProviderFactories.GetFactory(provstring);//Y ya tenemos nuestra connexion disponible.IDbConnection conexion= fact.CreateConnection();conexión.ConnectionString=cadConexion;...

CreateConnection

CreateCommand

CreateCommandBuilder

CreateConnection

CreateConnectionStringBuilder

CreateDataAdapter

CreateDataSourceEnumerator

CreateParameter

CreatePermission

Tabla 1.Nuevos métodos de los interfacespara abstraernos de la creación de

objetos de datos.

DataTable t = conexion.GetSchema("Tables");t.WriteXml("tables.xml");

Fuente 3.Metadatos en una línea de código

Page 77: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

genera sentencias SQL DML a partir de una instrucciónSELECT. Otra utilidad es la de parsear una cadena de cone-xión, y permitir al desarrollador tratar cada elemento deforma individual. Lo dicho, una utilidad que a más deuno le vendrá bien.

Mejoras en el pool de objetos

En la versión anterior de ADO.NET, no todoslos proveedores soportan el pool de conexiones.Unicamente los proveedores de SQL Server yOracle admitían esta funcionalidad –entre otrospocos servidores más particulares–. Pero OLEDBy ODBC no eran capaces de soportar estas carac-terísticas tan beneficiosas para la optimización delas conexiones. En esta versión se mantiene la mis-ma línea aumentando la granularidad de la genera-ción de las conexiones; la posibilidad de especificarun tiempo de espera personalizado de espera al ini-ciar la conexión y una valiosa funcionalidad que nospermitirá cerrar todas las conexiones abiertas de unpool con un solo método del objeto DbConnection:ClearPool por el cual cerramos las conexiones abier-tas de un determinado pool o bien ClearPools, la cualnos permite cerrar todas las conexiones del pool deun determinado DomainApp. Sin duda, una solucióna problemas específicos que seguro más de uno seha encontrado (ya que el cierre no siempre es auto-mático, depende de otros factores).

Trazabilidad

Otra gran mejora de las clases ADO.NET es sucapacidad de ser trazadas, esto es, de poder documentaren todo momento el estado en el que están y su infor-mación asociada. Esto nos será extremadamente útila la hora de poder investigar problemas relativos aproblemas en las conexiones, problemas en la ejecu-ción de consultas… dando mucha más informaciónque la que sólo podíamos recuperar con los mensajesOLEDB, que quedaban bastante limitados.

Tanto las clases de los proveedores como las uti-lidades de ADO.NET comunes comparten esta mane-

ra de trabajar, de forma que podamos trazar y depu-rar cualquier mínimo problema que se presente conla información adecuada para poder actuar en conse-cuencia. Todo un esfuerzo por parte de los desarro-lladores de esta tecnología.

Relativo a comandos y a recuperacionesde datos

No sólo los procedimientos de conexión hantenido cambios. Algunas mejoras en el lanzamien-to de comandos han sido introducidas en el inter-faz IDbCommand, responsable de que un cliente eje-cute instrucciones SQL en el servidor. Estas mejo-ras se pueden ver examinando el nuevo conjunto demétodos que despliega esta clase, que agregan méto-dos que afectan a cómo se procesan los comandosen entornos multi-hilo, gracias a las ejecucionesasíncronas.

Respecto a la ejecución asíncrona seguro que enmás de una situación nos hemos visto lanzandocomandos SQL que conllevan un alto tiempo deejecución de servidor o bien un tiempo de esperasuperior a la media debido a la carga de la red. Paraevitar que un cliente se quedara “cuajado” en estasdelicadas situaciones, nos hemos visto en la nece-sidad de meter estos tipos de operaciones en hilosde ejecución, de cuyo control hemos sido respon-sables nosotros –cayendo de nuevo en la falta deproductividad y menor tolerancia a fallos–. Ahora,los métodos Execute principales cuentan con sushermanos BeginExecuteXxx de forma que mediantedelegados, ADO.NET nos avisará de cuando ha ter-minado una determinada ejecución sea del tipo quesea y siendo la causa que sea. Lo cual, sí permitiráentornos de alto rendimiento con el mínimo esfuer-zo. Eso sí, no podemos abusar de estas cosas, pues-to que el esfuerzo a nivel de sistema no es gratis enentornos no preparados para este tipo de situacio-nes (véase Windows Me, 98…etc, si es que aún que-dan en algún rescoldo de la humanidad).

Pero no podemos dejar de lado las mejoras deDbDataReader. Aunque luego se comentará, es bueno

dotN

etM

anía

<<

77

dnm.ado.net<<

NOTA

Las utilidades de los proveedores .NETse han ampliado para acoger las mejoras delos estándares ANSI SQL como, por ejem-plo, la recuperación de Metadatos.[ ]

Otra gran mejora de las clases ADO.NET es sucapacidad de ser trazadas, esto es, de poder

documentar en todo momento el estado en elque están y su información asociada.

Page 78: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

anticipar que existen nuevos métodos de acceso a losdatos recuperados del servidor. De hecho, todas lasmejoras están recogidas en los nuevos tipos de datos,entre ellos el nuevo tipo XML. Sí, sí… poder recuperarun XML empotrado en una columna empleando unasencilla función GetXxxx(). Y como esto, otros tantosde tipos más… todo un lujo.

Las mejoras del cliente de SQL Server2005

Hasta aquí lo que son mejoras que afectan atodos los .NET providers. Pero hablando de uno enparticular, qué menos que comentar la estrella delmomento: el .NET Provider de SQL Server 2005.Este nuevo sistema gestor traerá consigo líneas ylíneas de artículos por su nuevo look y comporta-miento. Es lógico pensar que muchos de los cam-bios de ADO.NET tienen que pasar por adaptarsea las mejores de este sistema gestor. Centrándonosen System.Data.SqlClient, se nos ofrece nuevo:

MARS

No es que nos vayamos hasta Marte a descubrirnuevas cosas, no. Es el nuevo mecanismo de recu-peración de múltiples conjuntos de resultadosempleando una sola conexión. En las versiones ante-riores el problema que existía –aunque más bienoculto al desarrollador– era el de lanzar comandossimultáneos sobre la misma conexión activa. Puestoque la limitación impuesta es la de tener un cursorpor conexión ya sea por llamada a un procedimientoalmacenado, ya sea por un comando directo, ya queen los servidores se generan cursores implícitos.Intentar lanzar dos comandos seguidos falla enADO.NET 1.1 si los realizamos sobre el mismoobjeto Connection, llevando a un desarrollador aabrir más objetos Connection de los que tenía pre-vistos. Pero en ADO.NET eso ya está superado ypodremos hacer a través de una conexión “lo quenos de la gana” en este sentido. MARS será el meca-nismo por el cual los desarrolladores podrán redu-cir el número de conexiones abiertas ante el hechode lanzar múltiples comandos y recuperar múlti-ples conjuntos de datos.

Transacciones

No es que hayan cambiado mucho las cosas en estesentido, pero lo que sí se ha hecho es integrar en elcliente las funcionalidades del nuevo espacio de nom-bres System.Transactions por el cual se pueden obte-ner transacciones promocionadas. Esto va de hacerposible que se puedan tener varias conexiones a variasinstancias de SQL Server y conseguir que se activende forma “automática” las transacciones distribuidasen el caso de participar del mismo objeto Transaction.Eso es toda una ventaja sobre todo en aplicaciones deservidor o de grandes sistemas de información esca-lables donde la información puede estar distribuidaen múltiples servidores.

Protección ante caídas

Hablando de sistemas empresariales, es necesa-rio también tener en cuenta la alta disponibilidadde los servidores. Una cosa es que contemos conun cluster de SQL Server y eso ya de por sí nosofrezca una alta seguridad de forma transparente yotra muy distinta que nos pidan sistemas robustosen el caso de no disponer de estas tecnologías. Paraeso SQL Server 2005 cuenta con unas herramien-tas de control de fallos basadas en tecnologías demirroring de la base de datos, por los cuales si unode los espejos falla puede activarse el otro. Pero esen este momento cuando el cliente puede llegar aperder la conexión y necesitar reconectarse, si nocon la misma, con otra fuente. Para minimizar elimpacto de estas caidas, el cliente SQL Server pro-porciona de forma transparente el control de estassituaciones, retomando el control al iniciarse sub-siguientes operaciones SQL tras la caída. Impre-sionante. Y todo controlado con un sencillo coman-do agregado a la cadena de conexión.

Soporte de nuevos tipos de datos

Como parte de las muchas novedades de SQLServer 2005, están sus nuevos tipos de datos. Tiposque van desde refinamientos de los ya existentes–como los nuevos MAX BLOB, del estilo a VARBI-NARY(MAX)–, hasta integración de tipos ya conoci-

dotN

etM

anía

<<

78

dnm.ado.net<<

MARS será el mecanismo por el cual los desarrolladores podrán reducir elnúmero de conexiones abiertas ante el hecho de lanzar múltiples comandos

y recuperar múltiples conjuntos de datos

Page 79: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

dos como el XML; llegando hasta el avanzado UDT oUSer Defined Type que pasa por auténticas clases.NET. Todos estos nuevos tipos están recogidos enel espacio de nombres System.Data.SqlTypes y agre-ga las nuevas enumeraciones SqlUdt o SqlXml, quejunto con el método GetValue( ) eliminan cualquierlimitación que se le pudiera achacar a este meca-nismo de intercambio de datos (capaz de devolverclases, streams XML…etc).

Herramientas de migración y copia masiva dedatos.Tareas “bulk copy”

Otra de las enormes mejoras que se han inclui-do en este proveedor, es la capacidad de poderimplementar mecanismos de transferencia masivade datos, de una forma similar a cómo operan losconocidos mecanismos DTS de SQL Server. Lastareas bulk copy permitirán que podamos transferirinformación –por ejemplo, de un DataSet– desde unorigen a un destino, como si de una instrucción SQLse tratase, simplificando, en mucho, este tipo deprocesos a como se hacían anteriormente enADO.NET 1.1. Algo similar a lo que podemos enel código fuente 4:

Entre las posibilidades que nos brinda esta clasetan particular, estará la capacidad de coger datos tan-to de un DataSet como de un objeto de tipo Reader –locuál nos brindará infinitas posibilidades a la hora derecoger los datos de origen–.

La potencia de los eventos de datos

Una utilidad fantástica que .NET traía de serie,era la que nos permitía capturar eventos del siste-ma de archivos para poder actuar en consecuencia.Pues bien, a todos los que trabajamos con objetosdesconectados, ¿cuántas veces nos ha hecho faltaalgo similar? Y ¡qué complejo a podido llegar a ser!Pues bien, gracias a los mecanismos nuevos de SQLServer 2005, ya es posible estar “al loro” de estostantos para actuar en consecuencia. Para ello se nosproporciona la interesante clase SqlDependency porla cual podremos capturar eventos sobre datos –por

ejemplo, un cambio de datos en una fila– emplean-do para ello los omnipresentes delegados. Imaginaosla utilidad de esta clase en entornos Web a la horade combinarlo con el objeto Cache o en entornos declientes desconectados de cualquier tipo de cliente.NET. Las posibilidades son muy interesantes, conel mínimo esfuerzo. Pero cuidado, que os veo, queesto normalmente conllevará a recargar determi-nadas partes del DataSet… pero no abuséis de elloen entornos de alta transaccionalidad y multitud defilas. Antes que nada, echadle cabeza…

Otra forma de hacer las cosas, que ya comenta-remos con más detalle en otros artículos, lo pro-porcionan las nuevas colas de SQL Server 2005. Através de “conexiones” a colas de eventos median-te subscripciones SQL y empleando la claseSqlNotificationRequest podremos tanto capturareventos como reaccionar en consecuencia emple-ando prototipos de comunicaciones asíncronas.Todo un mundo…

Mejoras en las tecnologías desconectadasde los datos

No podíamos terminar este artículo sin hablar deotro gran segmento del acceso a los datos. Y es el delas clases desconectadas. Nuestra querida mega-cla-se, DataSet. En esta clase más que novedades, hay mul-titud de mejoras. Todas ellas relacionadas con su opti-mización y flexibilidad.

La mejor de esas modificaciones está en el objetoDataTable, que podríamos decir que ahora es un pocomás granular que antes. ¿Qué quiero decir?, pues queahora es capaz de hacerse persistente y poder vivirindependientemente de un DataSet. Esto que no pare-ce mucho, aporta muchas ventajas a la hora de tratartanto los orígenes de datos como la gestión del pro-

dotN

etM

anía

<<

79

dnm.ado.net<<

Fuente 4.Transferencias de datos

// Cargar un Dataset con datos y procesarlo...// Copiar los datos a SQL Server

string cadConexion = GetCadenaConexion();SqlBulkCopy bcp = new SqlBulkCopy(cadConexion);bcp.DestinationTableName = "Empleados";bcp.WriteToServer(dsEmpleados);

Fuente 5.Capturar eventos sobre los orígenes de datos

SqlCommand comando = new SqlCommand("SELECT au_id, au_lname FROM dbo.authors", conexion);

// Registrar el delegado de dependenciaSqlDependency depend = new SqlDependency(comando);depend.OnChanged += new OnChangedEventHandler(OnDatosCambiados);

conn.Open();SqlDataReader rdr = cmd.ExecuteReader();// procesar los datos recuperados

...

void OnDatosCambiados(object caller, SqlNotificationEventArgs e){

MessageBox.Show("Los datos origen han cambiado: "+e.Info);}

Page 80: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

pio DataSet, que podía llegar a manejar volúmenesde información considerables.

La otra gran mejora, está en la adición de losmecanismos de persistencia de los propios objetosDataset, que ahora permiten una seriación binaria,que seguro muchos notarán que mejora sensible-mente las comunicaciones en muchos casos aplica-dos al negocio. Es más, ahora será posible imple-mentar sistemas muy optimizados pudiendo inter-cambiar, en procesos de Remoting, datos empleandoDataSet. ¡Una pasada!

Más cositas que a más de uno le puede interesar:a) La posibilidad de trabajar con Datasets de “solo

lectura” con la nueva clase DataTableReader.b) La posibilidad de poder crear tablas a partir de

vistas.c) La posibilidad de indexar campos de un

DataTable que optimizan los procedimientosDML en tablas.

d) Búsquedas rápidas de filas, empleando méto-dos IndexOf().

e) Poder cambiar las columnas de posición.f) Mejoras internas del motor de inferencia, de

la seriación de tipos personalizados.g) Un largo etcétera que ya se verán en futuros

artículos, pero que os prometo que son trans-parentes al desarrollador, y que optimizaránaún más la ejecución del código.

Visual Studio 2005:Más herramientasque nunca

Para terminar, que no hay casi más hueco…hablar de otra de las estrellas desde la cual poderexplotar al máximo el acceso a los datos: VisualStudio 2005. Así como las versiones anteriores yaofrecían multitud de herramientas muy prácticaspara el acceso a los datos, Visual Studio 2005 no sequeda atrás y nos ofrece:

a) Una nueva paleta ampliada de controles para elacceso a los datos. De ellos, los más interesan-tes son BindingSource –encapsula un origen

de datos y los mecanismos de filtro y orde-nación integrados– y BindingNavigator –queofrece un nuevo sistema de navegación grá-fico de usuario más versátil y potente que losanteriores– y, cómo no, el visor de los nue-vos Reporting Services de SQL Server 2005.Todo un lujo.

b) Soporte nativo de acceso a SQL Server 2005.Entre los que se incluye la creación de unproyecto SQL, editores para crear objetosde todo tipo y un potente editor de códigogestionado a nivel de base de datos.

c) Smarttags (etiquetas inteligentes) para la rápidaconfiguración de los controles de datos.

En fin, que podríamos hablar de todo ello conmucha más profundidad, pero eso lo dejaremos afuturos artículos… ya que, de nuevo, Microsoft haconseguido que podamos derramar chorros de tin-ta con una nueva versión que lejos de haberse que-dado estancada, ha ofrecido multitud de mejoras ymultitud de añadiduras que harán que el desarro-llo de proyectos de datos sea más interesante, sen-cillo y productivo aún de la que ya era. De nuevo,me quito el sombrero.

dotN

etM

anía

<<

80

dnm.ado.net<<

Figura 1. La paleta y los nuevos controles en acción.

Figura 2. SmartTags de datos en acción.

NOTA

Casi todas las mejoras de los objetos des-conectados son transparentes al programa-dor. Pero un DataTable “Stand-Alone” y unformato binario nuevo de seriación hará lasdelicias de los más "friquis".[ ]

Page 81: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

dotN

etM

anía

<<

81

Visual Studio 2005 Team SystemLa diversidad de metodologías existentes, procedimientos y herramientas actua-les dificulta en gran medida la ejecución de proyectos de software. Por otro lado,la multitud de tecnologías y su complejidad agrava más esta situación, y se ve mul-tiplicada tanto en las áreas de sistemas como de desarrollo.

las aplicaciones complejas dehoy día requieren equipos multidisciplinares paradesarrollar y desplegar estas soluciones. Quizás elmayor reto con el que se encuentran nuestros profe-sionales es la comunicación entre ellos. Visual StudioTeam System facilita esta comunicación y la extien-de a todos los miembros del equipo de desarrollo alo largo del ciclo de vida de las aplicaciones.

¿Qué es Visual Studio Team System?Visual Studio Team System es un conjunto de

herramientas que integran orientación de procesos,arquitecturas prescriptivas, y herramientas de ciclode vida para la consecución de despliegue de solu-ciones sobre sistemas Windows. Visual Studio TeamSystem incluye herramientas que proporcionansoporte a todo el equipo de desarrollo, estas son:

• Visual Studio Edición para Arquitectos de Software.Las características más relevantes de esta edi-ción se centran en los diseñadores visuales quepermiten a los arquitectos y responsables tec-

nológicos diseñar soluciones orientadas a ser-vicios que pueden ser validadas contra sus pro-pios entornos operacionales.

• Visual Studio Edición para Desarrolladores deSoftware. Fundamentalmente incorpora herra-mientas de desarrollo avanzadas que permi-ten a los equipos aumentar su productividade introducir un alto nivel de calidad desde elprincipio y durante todo el ciclo de vida de laaplicación.

• Visual Studio Edición para Testeadores deSoftware. Herramientas avanzadas de prue-bas de carga que permiten a los equipos veri-ficar el rendimiento de aplicaciones antes deldespliegue.

• Visual Studio Team Foundation Server. Herra-mientas de colaboración de equipos basadas enservidor que permiten a las organizaciones ges-tionar y seguir el progreso y estado de los pro-yectos con menos esfuerzo.

Gestión de proyectosVSTS 2005 dispone de capacidades para realizar

la captura de requisitos de los proyectos y establecemecanismos de trazabilidad sobre estos durante todoel ciclo de vida del proyecto. Adicionalmente es posi-ble realizar la captura de requisitos con herramien-tas tales como Microsoft Excel o herramientas de ter-ceras compañías como por ejemplo BorlandCaliberRM.

Cualquier elemento planeado o trazado por elequipo de proyecto es gestionada por la base dedatos de work items. Un work ítem es un registro debase de datos que Visual Studio Team Foundationutiliza para trazar las asignaciones y estados de untrabajo determinado. En función de la metodolo-

dnm.arquitectura

<< Como consecuencia,

Por Alberto Ruiz

Figura 1. Visual Studio 2005 Team System.

Page 82: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

dotN

etM

anía

<<

82

dnm.arquitectura<<

gía aplicada al proyecto pueden variar los tipos dework items. Por ejemplo, en MSF Agile se definencinco tipos diferentes que son: escenarios, requisi-tos de calidad de servicio, tareas, bugs y riesgos.VSTS 2005 provee la conversión de datos desdeotros sistemas de tracking incluyendo RationalClearQuest, Bugzilla y PVCS.

Microsoft Project Server y Visual Studio 2005Team System se complementan en la gestión de tare-as y recursos. Mientras Project Server está diseñadopara una gestión de alto nivel de recursos a través demúltiples proyectos, VSTS 2005 esta diseñado paragestionar el ciclo de vida de desarrollo completo. Através de procesos de importación, exportación y sin-cronización de datos se comparte la información deambos sistemas de un modo sencillo y fiable. TantoMicrosoft Excel como Microsoft Project disponen deun add-in que incorpora Team System y que facilitala sincronización de estos documentos y los work itemsrelacionados del proyecto.

Otro aspecto a destacar es que no se requiere elentorno de Visual Studio para gestionar los proyec-tos; existe una versión independiente con caracterís-ticas para gestión de proyectos que constituye el clien-te de Visual Studio Team Foundation.

Las plantillas metodológicas son una nuevacaracterística de Team System que permite a losequipos configurar y personalizar los procesos enVisual Studio 2005. Las plantillas modifican el ser-vidor de Team Foundation para adecuarlo a los pro-cesos del equipo, tipos de work items, reglas, polí-ticas de protección, documentación de procesos,etc. Inicialmente Team System incorporará varias

plantillas metodológicas (MSF v4 Formal y Agil),así como terceros frabricantes generarán plantillaspara dicho entorno. La gestión de plantillas se rea-liza desde el “Process Template Manager”, hacien-do posible la importación o exportación manual demetodologías que son implementadas en forma deficheros XML.

Conviene no confundir las plantillas metodológicascon las plantillas empresariales que permiten crear mar-cos de trabajo con políticas y restricciones personali-zadas, complementando a las primeras. Las plantillasempresariales ya existentes en VS2003 continúan sien-do soportadas en VS2005.

Análisis y DiseñoEn las fases de análisis y diseño, Team System

incorpora diseñadores de sistemas distribuidos parareducir la complejidad del desarrollo y despliegue deaplicaciones orientadas a servicios. El conjunto estacompuesto por:

• Application Connection Designer. Permite a losarquitectos y desarrolladores definir aplicacio-nes que serán configuradas en sistemas de des-pliegue.

• Logical Datacenter Designer. Será utilizado paracrear diagramas que representen la estructuralógica del centro de datos con objeto de comu-nicar información relevante para el desarrolla-dor acerca del entorno de despliegue.

• System Designer. Asistirá en la composición deaplicaciones dentro de cada sistema final.

• Deployment Designer. Enlazará las aplicaciones den-tro del sistema lógico de servidores modelado sobreun diagrama de centro de datos lógico.

Estos diseñadores facilitan el diseño a los arqui-tectos de aplicaciones orientadas a servicios mientrasque los desarrolladores pueden trabajar con el códi-go generado manteniendo los cambios del código sin-cronizados con el diseño visual.

Figura 2. Work Items.

Figura 3. Process Template Manager.

Page 83: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Los arquitectos de infraestructuratambién pueden crear abstraccioneslógicas de sus centros de datos y vali-darlos contra las restricciones de la apli-cación o centro de datos diseñado porel arquitecto de aplicaciones sobre undespliegue real. Los informes genera-dos desde esta validación ayudan a docu-mentar el despliegue final.

Los diseñadores de sistemas distri-buidos, ofrecen restricciones y valida-ciones contra Web Service Enhancements(WSE), Seguridad IIS, SeguridadSQL, y ASP.NET. A modo de ejem-plo, esto permite asegurar que un com-ponente que requiere un tipo de segu-ridad, sólo podrá ser distribuido sobreun sistema que soporte ese tipo deseguridad.

Entre algunas otras característicassobresalientes en este apartado, cabedestacar que las configuraciones de losservidores Web basados en IIS descri-tas en el modelo pueden ser replicadasautomáticamente desde un servidor yaexistente evitando tener que volver aparametrizar todos los detalles del hostpara duplicar el elemento.

Los lenguajes soportados para losdiseñadores de sistemas distribuidosen primera instancia serán Visual C++(Extensiones Manejadas), Visual Basicy Visual C#. Sin embargo, el diseña-dor de clases soportará todos los len-guajes .NET suministrados porMicrosoft.

Desde el punto de vista de la exten-sibilidad se ha creado un modelo para

la primera release de los diseñadores desistemas distribuidos que permite obte-ner acceso a los servicios básicos o clien-tes (servicios Web, aplicaciones Web,aplicaciones Windows, servicios exter-nos o bases de datos externas). Más ade-lante se publicará un SDK que amplia-rá estas funcionalidades.

Dynamic System Initiative (DSI) esuna amplia iniciativa de Microsoft paraunificar hardware, software, y provee-dores de servicios alrededor de una nue-va arquitectura basada en SystemDefinition Model (SDM). Este último esun anteproyecto vivo que cubre el ciclode vida y unifica las políticas de opera-ciones de IT con los requisitos opera-cionales de las aplicaciones. En tiempode diseño permitirá a través de VisualStudio capturar las políticas de softwa-re y describir los requisitos operacionesde la aplicación. En tiempo de desplie-gue, la descripción de la aplicación per-mitirá al sistema operativo automatizarel despliegue completo de la aplicacióny alojar dinámicamente un conjunto dis-tribuidos de servidores, almacenamien-to, y recursos de red que la aplicaciónrequiere.

No obstante, no podemos pasar poralto a Visio, que sigue incorporadocomo herramienta de diseño en VisualStudio 2005. Sin embargo, en la cons-trucción de aplicaciones de un domi-nio específico como aplicaciones orien-tadas a servicios, los diseñadores de sis-temas distribuidos son más idóneos. Esposible encontrar más informaciónsobre diseñadores de sistemas distri-buidos en http://msdn.microsoft.com/vstudio/teamsystem.

Herramientas de desarrolloavanzadas

Las herramientas de análisis estáti-co de código que acompañan a VisualStudio 2005 permiten detectar defec-tos en el código inspeccionando elcódigo fuente o los binarios sin nece-sidad de ejecutarlos. PREFast o FxCopson herramientas de este estilo. Estasherramientas se integran con el proce-so de compilación produciendo adver-tencias o errores en la lista de erroresde Visual Studio y facilitando la nave-gación hasta el defecto con un solo clic.

dotN

etM

anía

<<

83

dnm.arquitectura<<

Figura 4. Diagrama de un Datacenter lógico.

Page 84: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

Aunque las herramientas ya disponende reglas para el análisis estático, esposible agregar nuevas reglas a travésde las extensiones.

Application Verifier es una herra-mienta de Visual Studio que expone ins-trumentación ya presente en el sistemaoperativo Windows. La instrumentaciónrealiza verificaciones en los programas enejecución dentro de áreas seleccionadascomo consumo de memoria, utilizaciónde secciones críticas o modo de utiliza-ción. Permite detectar problemas de sola-pamiento de memoria, bloques alojadosen el heap, reutilización después de borra-do, doble borrado y contaminación delheap. En el área de secciones críticas detec-ta operaciones que pueden conducir adeadlocks o pérdida de recursos. En la par-te de modo de utilización detecta inten-tos de reutilización de manejadores queya no son válidos.

Code profiler es un mecanismo deVisual Studio Team System que perió-dicamente interrumpe la ejecución deuna aplicación para determinar qué fun-ción se está ejecutando. Mantiene unconteo para cada función que es mos-trado sobre una estadística una vez fina-lizada la ejecución del profiler para deter-minar el rendimiento medio de cadafunción analizada. Sin embargo, estafuncionalidad no estará disponible paraaplicaciones 64 bits hasta siguientes ver-siones de Team System.

Herramientas de testeo Las pruebas en Visual Studio Team

System son gestionadas a través del TestManager, que es un visor de los tipos depruebas asociados a un proyecto. Lostipos que se pueden incluir en el visorson: pruebas manuales, unitarias y prue-bas de carga.

Los proyectos de test son proyectosde Visual Studio estándar creados espe-cíficamente para contener las pruebas.Este tipo de proyectos permite a los usua-rios establecer una línea clara entre elcódigo desarrolladoy el código utilizadopara el aseguramien-to de la calidad. Porotro lado TeamSystem incluye en elFramework de Testun sistema de gestiónque permite distri-buir las pruebas enmáquinas locales yremotas.

Realizando unacomparación rápi-da entre Visual Studio Team Test yApplication Center Test podríamosdecir que las características que dansoporte a las pruebas de carga soncompletamente nuevas, mientras queel resto de prestaciones soportadas porACT han sido ampliamente mejora-das. Entre las características queactualmente no están incorporadas seencuentra el soporte para la automa-tización de pruebas de interfaz deusuario (GUI), sin embargo, este tipode funcionalidades serán suministra-das por herramientas de terceros quese integrarán en Visual Studio.

Control de código fuenteVisual Source Safe continúa acom-

pañando a Visual Studio como una solu-ción individual o para pequeños equi-pos. Team System incluye un servidory una gestión de la configuración sus-tentada sobre base de datos que es capazde escalar entre un gran número deequipos y proyectos.

En la versión final del productoexistirá un proceso de migración para

pasar de una basede datos VisualSource Safe a TeamSystem. Por últi-mo, cabe destacarque el nuevo siste-ma de control decódigo fuente ex-pone un conjuntode API que permi-

ten ser consumidas por terceras herra-mientas y que pueden integrarse conVisual Studio facilitando la personaliza-ción de procesos en la gestión de la con-figuración de cada organización.

Conclusión

A medida que las aplicaciones cre-cen en complejidad, los equipos de desa-rrollo necesitan los mismos principiosRAD de simplicidad y flexibilidad parair escalando con ellos. Reducir la com-plejidad significa aumentar la producti-vidad, ahorrando costes mientras sereducen los tiempos de desarrollo. ConVisual Studio Team System las organi-zaciones pueden:

• Reducir la complejidad de dis-tribución de modernas solucio-nes orientadas a servicios, opti-mizándolas para los entornosoperacionales.

• Facilitar colaboración entretodos los miembros de un equi-po de software, incluyendo ana-listas de negocio, jefes de pro-yecto, arquitectos, desarrolla-dores, testers, y directores deoperaciones.

• Personalizar y extender sus pro-pios procesos internos y marcosde trabajo o elegir entre más de450 productos adicionales.

Figura 5. Análisis de código.

Figura 6. Test Manager.

Figura 7. Gestión de código fuente.

84

<<do

tNet

Man

íadnm.arquitectura<<

Page 85: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-
Page 86: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

este recorrido por Visual Studio con unaespecie de pregunta existencial:

Tengo una pregunta existencial: ¿Hay vida más alláde los asistentes en Visual Studio 2005? Si los utilizo,¿podré seguir escribiendo código manualmente? ¿Esarrastrar-y-soltar el futuro de la programación?

La mayoría de las cosas que conozco hoy se remon-tan a hace quince años, cuando la única forma de pro-gramar aplicaciones Windows era utilizando el SDK. Setrataba de un API al estilo C, expuesto por el sistemaoperativo. Trabajar con el SDK de Windows, te da esesentido especial de los sistemas de ventanas, te pone encontacto con la maquinaria de bajo nivel, y al final, esdifícil, y a menudo, frustrante. Por esa razón se inven-taron primero, Visual Basic, y después, los asistentes.

Empecé a jugar con los asistentes en Visual Studio4.0. En ese momento, un asistente era simplementeuna librería de MFC, que debía registrarse e integrar-se con el IDE de Visual Studio. El asistente creaba unproyecto con un número predeterminado de ficherospara formar una aplicación con un conjunto de capa-cidades definidas por el usuario. Estaba dirigiendo un

grupo de desarrollo, y los asistentes me ofrecieron unaexcelente herramienta para escribir código más rápi-damente, y de acuerdo con un conjunto de premisascorporativas. En ese momento, era un fan de los asis-tentes, aunque, en realidad, era un fan de los asisten-tes personalizados. ¿Qué es un asistente personaliza-do? Uno que te escribes tú mismo para ayudarte a ti ya tu equipo a desarrollar con ciertas características, másrápido, con unos pocos "clicks”.

¿Cuál es la diferencia, si la hay, entre un asistente yotro? Es más o menos la misma diferencia entre los cul-tivos normales y los biológicos. Usualmente, no sabe-mos qué es lo que contienen los vegetales que compra-mos en un supermercado. Pero si lo cultivas tú mismo,sabes mucho de ellos. La moraleja de esto es que muchosasistentes de Visual Studio esconden código de la vistapredeterminada y transmiten una sensación de omnipo-tencia. Haces “clic” y el código se despliega ante tus ojos.¿Es eso lo que quieres? ¿Sabes realmente lo que hace esecódigo? Por ejemplo, el control SQLDataSource, hace quela paginación a través de un origen de datos sea trivial.Pero si no conoces exactamente cómo funciona, podrí-

Visual Studio 2005 tips & tricks

Dino Esposito

dnm.todotnet.qa

<< Vamos a comenzar

Dino Esposito es redactor de dotNetManía.

Formador, consultor y escritorafincado en Roma.Miembro

del equipo de Wintellect,Dino está especializado en

ASP.NET y ADO.NET. Puedeenviarle sus consultas a

[email protected]

el único asistente realmente bueno, esel que construyes tú mismo (o queconsigues conocer al detalle).Utiliza

los asistentes para ahorrar tiempo, nopara aprender programación

Visual Studio 2005 es un entorno contenedor que integra la funcionalidad de múltiplesdiseñadores visuales. Hay diseñadores para construcción de aplicaciones WindowsForms, para sitios Web ASP.NET, para servicios Web, etc.Tiende a ofrecer un montónde asistentes para facilitar la labor y hacer que la escritura de código sea la menor posi-ble.A algunos les encantan los asistentes, otros los odian.

¿Hay vida más allá de los asis-tentes en Visual Studio 2005?¿Es arrastrar y soltar el futuro

de la programación?

¿ ?

Page 87: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

as terminar con código ineficiente que nunca serías capazde escribir en Visual Studio .NET 2003.

Parafraseando un viejo lema del cine, el único asis-tente realmente bueno, es el que construyes tú mismo (oque consigues conocer al detalle). Utiliza los asistentespara ahorrar tiempo, no para aprender programación.

Lo que no soporto de Visual Studio 2003, es queplantea una serie de restricciones a los desarrollado-res, tales como IIS, Extensiones de Servidor deFrontPage, y el uso de proyectos. ¿Me va a pasar lomismo con Visual Studio 2005?, a no ser que solucio-ne este tipo de problemas…

Por supuesto, estamos hablando de Visual Studio2005 y aplicaciones ASP.NET. Por supuesto, la ver-sión 2005 suministra una forma mucho más sencilla yamigable de construir aplicaciones ASP.NET. Lasmejoras clave, realmente solucionan muchos de losproblemas reportados por los programadores en lospasados años: falta de acceso FTP o IIS a máquinasremotas, IIS como único entorno de depuración, nece-sidad de soluciones .SLN para construir, no ya apli-caciones, sino una simple página, o falta de opcionesalternativas al “code-behind”.

Visual Studio 2005, trae buenas noticias a los pro-gramadores. Lo primero y más importante, IIS ya noes un requisito estricto. De hecho, el producto incor-pora un servidor Web local que hace que IIS sea opcio-nal, al menos para testeo rápido y depuración. El ser-vidor Web local es una versión ligeramente mejoradade Cassini, una herramienta que se lanzó originalmen-te con WebMatrix. Es importante tener en cuenta queel servidor local representa solamente la opción pre-determinada. Si abres un proyecto a partir de un direc-torio virtual de IIS, Visual Studio utilizará IIS paradepurar la aplicación.

El servidor Web embebido es solamente un peque-ño archivo de código ejecutable, y no puede reempla-zar las características de un servidor completo comoIIS. Funciona sólo con páginas individuales, y no inclu-

ye ninguna de las características adicionales de IIS,tales como la metabase. En otras palabras, utiliza libre-mente el servidor local para propósitos de depuración,pero no te fíes plenamente de él para la distribuciónde la aplicación.

Visual Studio 2005 soporta múltiples formas de abrirsitios Web. Además de usar las FPSE (Extensiones deServidor de FrontPage), puedes acceder a tus ficheros desistema mediante FTP o ubicaciones del sistema de fiche-ros. También puedes acceder a la instalación local de IIS,navegar por la jerarquía de directorios virtuales existen-te, y acceder a las raíces virtuales o crear nuevas entra-das. Puedes abrir sitios Web existentes mediante el pro-tocolo FTP y luego crear y editar archivos. Sin embar-go, debe de tenerse acceso al sitio FTP y permisos sobrelos directorios correspondientes. El directorio debe deexistir, porque Visual Studio no puede crear nuevos sitiosWeb vía FTP.

Además, Visual Studio 2005 no compila todo el códi-go del sitio en un único ensamblado, como la versiónanterior. En su lugar, utiliza el nuevo modelo de compi-lación de ASP.NET y reconoce dinámicamente los tiposde ficheros basándose en el directorio al que pertenecen.De esa forma no sólo se capturan los cambios en los fiche-ros .ASPX, sino en los de extensiones .CS o .VB e inclu-so los de recursos. Esto desemboca en una especie decompilación dinámica para las clases de soporte “code-behind”. Sin embargo, hay que ir con cuidado. Evitar lacompilación explícita de toda la aplicación tiene un cos-to que debe ser tenido en cuenta. La distribución al ser-vidor Web debe de constar obligatoriamente de fiche-ros .VB o .CS. Y aunque los ficheros de código fuenteno pueden ser solicitados explícitamente al servidor, estánahí con el riesgo potencial de que un atacante pudieraacceder a ellos y poner en riesgo la propiedad intelec-tual. Para evitar esto, dispones de dos opciones: precom-pilar todo el sitio para distribuir ensamblados ya cons-truidos en el sistema local, o compilar los ficheros decódigo a un único ensamblado. La pre-compilación delsitio es otra de las características más interesantes deASP.NET 2.0 (no de Visual Studio 2005), que permite

dotN

etM

anía

<<

87

dnm.todotnet.qa<<

To

do

tNet.

qa@

do

tnetm

an

ia.c

om

To

do

tNet.

qa@

do

tnetm

an

ia.c

om

¿Qué es un DiffGram? Es la representación XML del estado de un

DataSet, incluyendo filas actuales,cambios realizados, y errores pendientes en filas de la tabla.

Lo que no soporto de VisualStudio 2003, es que plantearestricciones tales como IIS,Extensiones de Servidor de

FrontPage y el uso de proyec-tos.Me va a pasar lo mismo

con Visual Studio 2005

¿?

Page 88: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

distribuir aplicaciones Web en un formato listo para usar-se, preservando así la propiedad intelectual, y evitando,además, ese pequeño retraso inicial en las peticiones,debido a la compilación dinámica de recursos.

Por último, pero no menos importante, Visual Studio2005 soporta la edición de ficheros individuales, y norequiere de un proyecto para la edición simple de unfichero en disco. De modo que, si hacemos doble-clicen un fichero .ASPX en el explorador de Windows, selanza Visual Studio 2005, permitiendo la edición inde-pendiente. A diferencia la versión precedente, IntelliSensey el coloreado del código fuente funciona correctamen-te. La página puede verse, además, directamente en elnavegador Web a través del servidor Web local.

He estado investigando últimamente con VisualStudio 2005. Y tengo razones a favor y en contra delparadigma de correspondencia 1 a 1 entre los ficherosen disco y los nodos del Explorador de Soluciones. Larazón por la que no me gusta, es que si tengo directo-rios con montones de ficheros (por ejemplo, ficherosgráficos) las operaciones de copiar y pegar son muy len-tas, por no mencionar las operaciones tipo chek-in y check-out con Visual SourceSafe. ¿Sugerencias?

Parece que esta es una de las preguntas más frecuen-tes a las que Scott Guthrie –el Manager de proyecto deASP.NET– ya respondió públicamente en su sitio Webhttp://weblogs.asp.net/scottgu. Es importante tener en cuen-ta que Visual Studio no muestra todos los ficheros y car-petas en el Explorador de Soluciones, sino que se omi-

ten ciertos archivos y carpetas ocultos, y lo mismo suce-de con las carpetas virtuales de IIS. De forma que, paraocultar un directorio demasiado grande de la vista delexplorador, basta con marcar la carpeta como un direc-torio virtual de IIS. Nada cambia en la aplicación, perose obtienen una serie de beneficios asociados. Por ejem-plo, puedes reutilizar tus imágenes más fácilmente (ocualquier otro recurso), en otras aplicaciones y almace-narlos en cualquier parte del servidor Web. El conteni-do de un directorio virtual, es automáticamente exclui-do de cualquier operación de distribución y el códigofuente tampoco se incluye en el control de código delproyecto.

A menudo tengo la necesidad de mover proyec-tos entre máquinas distintas. ¿Existe finalmente unaforma de transportar la configuración del IDE de for-ma fácil y cómoda?

Supongo que eres un típico adicto al trabajo (comoyo) y no puedes estar en casa unas pocas horas por lanoche sin hacer algo. De ahí la necesidad de transva-sar la configuración del IDE de la máquina del traba-jo al PC de casa. ¿Estoy en lo cierto? Francamente,espero que no.

Típicamente, cuando trabajas con Visual Studio,desarrollas macros, reordenas menús, defines nuevosvalores predeterminados, añades nuevos controles a laCaja de Herramientas, creas nuevas plantillas de proyec-to y defines nuevos colores y tipos de letra. Toda estainformación no es fácil de catalogar si tienes que hacer-lo manualmente. Por suerte, Visual Studio 2005, sumi-nistra una nueva caja de diálogo de“Importación/Exportación de configuraciones”, desdeel menú de “Herramientas”. Seleccionas el conjunto devalores de configuración que quieres almacenar y losguardas en un fichero. El fichero puede almacenarse encualquier parte y recibe una extensión .vssettings. Apesar de la extensión, es un fichero XML. Basta conmover el fichero a la máquina de destino e importarla.No puede ser más fácil.

dotN

etM

anía

<<

88

dnm.todotnet.qa<<

To

do

tNet.

qa@

do

tnetm

an

ia.c

om

To

do

tNet.

qa@

do

tnetm

an

ia.c

om

Traducción por Marino Posadas

A menudo tengo la necesidadde mover proyectos entremáquinas distintas. ¿Existefinalmente una forma de

transportar la configuracióndel IDE de forma fácil

y cómoda?

¿?

IIS ya no es un requisito estricto.Dehecho, el producto incorpora un servidor Web local que hace que

IIS sea opcional, al menos para testeorápido y depuración

tengo razones a favor y encontra del paradigma de

correspondencia 1 a 1 entrelos ficheros en disco y losnodos del Explorador de

Soluciones

¿ ?

Page 89: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

dotN

etM

anía

<<

89

<<

Visual C# 2005:A developer's notebookJesse Liberty

Editorial: O'ReillyISBN: 059600799XPáginas: 239Publicado: Abril, 2005Idioma: Inglés

El lenguaje C# sigue acumulando interesantes cambios estructurales y semánticos para man-tenerse como “lingua franca” y referente de las novedades en lenguajes de desarrollo, comonos decía el mes pasado Jeff Prosise. Jesse Liberty, que ya nos había convencido con susobras anteriores, y especialmente, con su “Programming C#”, aborda en esta pequeña obrajustamente lo que necesita el desarrollador de C# que quiere actualizar sus conocimientosa la nueva versión.

No se trata de una obra de iniciación, no obstante. Se asumen conocimientos suficientes dela versión anterior del lenguaje, de forma que el libro se centra fundamentalmente en lo quees nuevo, y lo hace con la profundidad suficiente para no dejar cabos sueltos.

Pro C# 2005 and the .NET 2.0 PlatformAndrew Troelsen

Editorial: APressISBN: 1590594193Páginas: 1.032Publicado: 2005Idioma: Inglés

Autor de otras 6 obras relacionadas con la programación, Troelsen obtuvo su máximoreconocimiento con la publicación de “COM and .NET interoperability” y “Visual Basic.NET and the .NET Platform: an advanced guide”, que se situaron en los best sellers deAmazon dentro de su género. Bien, pues, esta obra ya ha vendido más que las otras dos,y va en camino de batir todos sus registros anteriores.

Se trata de una obra extensa, en la que se recorren, no solo las novedades lingüísticas,sino (y más importante en este caso), todas las novedades de las librerías de .NETFramework 2.0, usando C# como lenguaje base para todos los ejemplos de código. Enfin, una revisión en profundidad de todo lo disponible en esta versión, muy recomen-dable para programadores que conozcan la versión anterior y quieran actualizar soft-ware o pensar en software hecho con la nueva versión a la luz de lo ya conocido.

dnm.biblioteca.net<<

dnm.biblioteca.net

Page 90: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-

DonationCoders. Este mesqueremos dedicar esta sección,no a un producto concretosino al sitio especializadoDonationCoders, en el queparticipan varios autores, algu-nos de los cuales han aporta-do utilidades notables. Uno deellos, Skrommel, presenta unautilidad que recomendamos(Process Guard), que monitori-za (y avisa, a voluntad) situa-

ciones límite del sistema (respecto al uso de memoria,puertos, disco, etc). Pero todo el sitio es realmente útil.http://www.donationcoders.com.

Microsoft y la seguridadAnti-spyware en Windows Vista y otras novedades

Según Greg Sullivan, Lead Windows Product Manageren Microsoft (del que publicaremos una entrevista enbreve), el software de anti-spyware que ahora está sien-do distribuido gratuitamente para versiones anterioresde Windows, formará parte de Windows Vista, en unesfuerzo por suministrar mejores servicios básicos deseguridad para los usuarios no corporativos. La noticiase inscribe dentro de la política iniciada por la compa-ñía acerca de la importancia de la seguridad, y coincidecasi en el tiempo con el anuncio de un nuevo software,Microsoft Client Protection, cuya disponibilidad enbeta parece próxima. Dentro de esta línea estaría la pre-sencia de Windows OneCare Live, un sistema antivi-rus y anti-spyware que parece uno de las consecuencias

de la adquisición de Sybari Software por Microsoft hacealgún tiempo.

Curiosamente, hace unos días, Microsoft invitó a un nume-roso grupo de “hackers éticos”, a investigar vulnerabilida-des en su software, en el evento de seguridad Blue Hat.Y, casi de forma paralela, Tony Chor (Lead ProgramManager para IE7) mostraba en Malasia algunas de las nue-vas características de IE7 Beta 2, enfatizando en el hechode que no se trata de un conjunto de nuevos parches, sinode un cambio profundo a nivel de estructura, con la segu-ridad en mente en todo momento.

dotN

etM

anía

<<

90

no

tici

as.

no

tici

as

Marino Posadas

Script para automati-zar el asistente degrabación de CD en

Windows XP: Fernando Muñoz el webmaster deFermu's Website (http://www.fermu.com/content/view/262/2/lang,es) nos trae este interesante ejemplo de códi-go de script, producido por él (que no quiere atribuir-se su autoría) y que puede además darnos ideas paraotros usos similares.

Documentos y código en la Red Utilidades del mes

VBaccelerator: Sitio con notablesaportaciones de código fuente, espe-cialmente en Visual Basic .NET. Sin

haberlo hecho a propósito, una de las novedades actuales es uncódigo fuente en VB.NET que permite mediante las API ImageMastering API (IMAPI) controlar el proceso de grabación, selec-ción de contenidos y producción de CD (http://www.vbaccelera-tor.com/home/NET/Code/Libraries/Writing_CDs/Writing_Data_CDs/article.asp).

Sitios recomendados

WWWCoder: Interesante sitio con artí-culos y código fuente sobre desarrollo en .NETde cara a la programación Web y cliente/ser-vidor. Actualiza con bastante frecuencia.Disponible en http://www.wwwcoder.com/main/Default.aspx

<<

dnm.desvan<<

Page 91: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-
Page 92: Visual Basic - Tecnología, Tips de Programación y … · Visual Studio 2005, junto con SQL Server 2005 y BizTalk Server 2006. Por este moti-vo hemos querido hacer un número espe-