Professional Documents
Culture Documents
Visual Basic C# Delphi ASP.NET ADO.NET .NET Framework Windows Server System
dotNetMana
www.dotnetmania.com
Novedades en
la seguridad en
Visual Studio 2005
Programando para
64 bits con .NET Framework 2.0 Novedades
para desarrollo Web en ASP.NET 2.0
Optimizacin ASP.NET 2.0 Novedades
en el estndar de C# Reflexionando y
haciendo reflexin sobre la genericidad
de .NET 2.0 Novedades de Visual Basic
2005 Maestro-detalle con Visual Basic
2005? El IDE de V isual Studio 2005
Novedades en la extensibilidad de Visual
Studio 2005 ADO.NET 2.0, ms y mejor
acceso a datos
dnm.editorial
dotNetMana
Editor
Paco Marn
(paco.marin@dotnetmania.com)
Administracin
Pilar Prez
(pilar.perez@dotnetmania.com)
Asesor Tcnico
Marino Posadas
(marino.posadas@dotnetmania.com)
Redactores
Antonio Quirs, Dino Esposito, Guillermo
'guille' Som, Jorge Serrano, Jos Manuel
Alarcn, Luis Miguel Blanco, Miguel Katrib
(Grupo Weboo).
Colaboradores habituales
ngel Esteban, Braulio Dez, Daniel Mazzini,
Eladio Rincn, Erich Bhler, Fernando
Nogueras, Jorge Crespo Cano, Jos Miguel
Torres, Miguel Egea, Octavio Hernndez,
Pablo Abbate, Pepe Hevia, Rodrigo Corral y
Salvador Ramos.
Adems colaboran en este nmero
Alberto Ruz, Carlos Quintero, Javier
Izquierdo, Jos Murillo, Mario del Valle y
Sergio Vzquez
Edicin y Suscripciones
.netalia
c/ Robledal, 135
28529 Rivas-Vaciamadrid (Madrid)
<<
Y tambin, cmo no, algunas novedades que afectan a los lenguajes de programacin, con artculos generales para Visual
Basic y el nuevo estndar ECMA de C#; adems, otro ms especfico de generics con C#
y uno ms explicando la generacin de cdigo para Visual Basic con uno de los asistentes. Microsoft ha puesto especial cuidado en
ahorrarnos lneas de cdigo innecesarias;
segn comenta Jos M. Alarcn en su artculo, hasta un 70% en ASP.ET 2.0 con respecto a ASP.NET 1.x.
No nos hemos olvidado del IDE de
Visual Studio 2005, nuestro banco de trabajo, que sufre cambios significativos.
Enfocado desde un punto de vista general y
tambin ms especficamente con las novedades sobre la extensibilidad.
Seguramente debimos hacer ms hincapi en las nuevas capacidades de despliegue; por supuesto, las cinco pginas dedicadas a Team System son insuficientes; las
dos dedicadas a seguridad slo dan para
apuntar novedades; nos hemos dejado atrs
a J#,... En fin, faltan muchas lneas por
escribir, afortunadamente. Aqu no hace
ms que comenzar nuestro trabajo con esta
nueva versin.
Mi ms sincero agradecimiento a las
personas de Microsoft Ibrica que nos han
apoyado incondicionalmente y, por
supuesto, a todos los redactores que se han
implicado y que han trabajado duro para
que esto fuera un todo y no la suma de sus
individualidades.
Lo mejor es que se ponga cmodo,
pase pgina y deje esta editorial para leer
algo ms interesante.
<<dotNetMana
20
dnm.sumario
Visual Studio 2005, un entorno de desarrollo para todos los gustos
8-10
12-13
14-15
16-17
18-24
25-29
dnm.laboratorio
30-32
dnm.sumario
34-35
Novedades en el estndar de C#
36-39
40-46
48-55
56-59
60-63
64-68
dnm.laboratorio
70-72
74-80
81-84
dnm.todotnet.qa
86-88
dnm.biblioteca.net
89
dnm.desvan
90
noticias.noticias.noticias.noticias.noticias.noticias
<< dotNetMana
<< dnm.noticias
Business Objects presenta BusinessObjects XI Release 2
permite a los usuarios realizar consultas y anlisis sobre esas fuentes de una
forma ms sencilla. Ahora los usuarios
pueden integrar informacin procedente de bases de datos OLAP y relacionales y efectuar consultas y anlisis
de manera integrada a partir de esos
datos, como si estos procediesen de una
sola fuente.
BusinessObjects Composer
BusinessObjects Composer es un producto nuevo e innovador que ayuda a los responsables de TI a mejorar su eficiencia y
la calidad de diseo de sus proyectos de
extraccin, transformacin y carga de datos
(ETL). Los proyectos de ETL suelen disearse de forma ad hoc, en un proceso para
el cual escasean las mejores prcticas.
Cuando un responsable de TI empieza a
disear un proyecto de ETL, ha de definir
minuciosamente la correspondencia exacta entre cada fuente de datos y las necesidades empresariales de los usuarios finales.
Con BusinessObjects Composer, los desarrolladores pueden documentar fcilmente
todo el proceso de ETL. Ahora pueden iniciar nuevos proyectos de ETL de mayor
nivel con slo consultar proyectos realizados anteriormente.
dnm.noticias
Eventos
Compuware celebr el 6 de octubre en su sede central de Detroit el segundo encuentro tecnolgico
OJ.X y donde se mostraron las ms novedosas tecnologas de desarrollo de aplicaciones
El evento reuni a alrededor de 1.000
desarrolladores para mostrarles las ms avanzadas tecnologas y experiencias en desarrollo de software.
En este segundo ao, Compuware ha
ampliado el alcance del evento incluyendo
las tecnologas de desarrollo Microsoft .NET
y Java, las dos mayores plataformas que estn
usando actualmente las empresas para el
desarrollo y la implantacin de aplicaciones
distribuidas.
El encuentro tuvo como objetivo mostrar
y educar sobre las habilidades y estrategias ms
avanzadas para incrementar la productividad
del desarrollo, el ROI (retorno de inversin) y la
calidad, con independencia de la tecnologa
subyacente. La edicin de este ao cont con
presentaciones relevantes tanto por parte de
Microsoft como de Eclipse.
El evento se desarroll en un ambiente
abierto e incluy sesiones tcnicas, laboratorios de aprendizaje interactivo, estudios reales
de casos de desarrollo y conferencias de expertos. Los desarrolladores, sus jefes y los CIO
pudieron aprender tendencias y tcnicas de la
mano de algunos de los ms brillantes y consumados visionarios de la industria.
Soporte para Visual Studio 2005
Compuware anunci en este evento el
soporte para Microsoft Visual Studio 2005
de sus herramientas para la ayuda al desarrollo, testeo, gestin de aplicaciones.
Compuware es un miembro importante
y valioso del programa Visual Studio Industry
Partner (VSIP) y tiene un rica tradicin en aplicaciones empresariales, dijo Rick LaPlante,
General Manager de Visual Studio 2005 Team
System en Microsoft Corporation (al que tuvimos la ocasin de entrevistar el mes de mayo
pasado). Nosotros estamos muy contentos de
dnm.noticias
<< dotNetMana
OJ.X de Compuware
Javier Izquierdo
Javier Izquierdo
Es Ingeniero Tcnico de Obras
Pblicas por la UPM y
Gerente de Producto de Visual
Studio desde julio de 2000
que Microsoft
present la primera versin de Visual Studio, la suite de herramientas de desarrollo para trabajar en
entornos Windows. Por aquel entonces, con Visual
Studio 97, bsicamente se sigui el concepto de otros
paquetes y sencillamente se procedi a incluir los
diferentes productos existentes en un mismo paquete, pero cada uno tena su propio ejecutable y trabajaban por separado, con lo que los desarrolladores habitualmente aprendan a manejar un solo lenguaje de programacin.
An hubo otro producto, Visual Studio 6.0, con
la misma filosofa aunque con sensibles mejoras con
respecto a su antecesor. Pero ya en el 2000 el propio Bill Gates anunci pblicamente el cambio
trascendental que Microsoft planeaba para su futura lnea de productos estamos hablando de .NET,
la plataforma de aplicaciones empresariales de
Microsoft que como buenos lectores de esta revista ya conocen con bastante detalle.
As, en la primavera de 2002 presentamos al mercado el nuevo Visual Studio .NET 2002, y con l la base
de este cambio, el primer .NET Framework, as como
ASP.NET y un nuevo y moderno lenguaje basado en
C, que desde su creacin ha recibido el apoyo de
numerosos acadmicos y desarrolladores profesionales, quienes ya lo han convertido en uno de los ms
utilizados en la actualidad; nos referimos por supuesto a C#. Haba llegado la hora de los servicios Web y
la programabilidad de Internet.
Este primer Visual Studio .NET cambiaba drsticamente el concepto de la suite de desarrollo, al
ofrecer un entorno de trabajo integrado y nico
independientemente del lenguaje de programacin
empleado (existen casi 30 lenguajes .NET ahora
mismo), y permitiendo la utilizacin de diferentes
lenguajes en un mismo proyecto. .NET comenzaba a despertar el inters de la comunidad de desarrollo, y en poco tiempo se converta en una alter-
dnm.plataforma.net
dnm.plataforma.net
como para los profesionales del desarrollo Web tendremos Visual Studio
2005 Standard, el cual incluye opciones como el desarrollo para dispositivos mviles o el soporte nativo de 64
bits, y que permite adems extender
el entorno de desarrollo con ms de
300 herramientas de otros fabricantes
miembros del programa de Partners
de Visual Studio (VSIP).
<<dotNetMana
<< dnm.plataforma.net
Conclusin
<<dotNetMana
10
dnm.directo.entrevistas
Marino Posadas
Marino Posadas es
asesor tcnico y
redactor de
dotNetMana, MVP de
C# y formador de
Alhambra-Eidos
las distintas versiones de Visual Studio 2005, incluyendo las ediciones Express, en trminos de licencias y
precios, o sea, en cuanto a su disponibilidad.
Visual Studio Express est pensado para estudiantes, aficionados y personas que empiezan con desarrollos, sin experiencia previa. Queramos poner a disposicin de este colectivo una herramienta sencilla, inmediata, con todo lo que se necesita para empezar a hacer
desarrollos reales. Por eso incluye muchos tutoriales,
ejemplos, acceso a recursos comunitarios, etc. En trminos de funcionalidad, no existe ninguna limitacin,
salvo algunas herramientas de alto costo como las pensadas para desarrollo en grupo, plantillas empresariales, aplicaciones para dispositivos mviles, etc. Pero
puede desarrollarse cualquier tipo de aplicacin mediante las ediciones Express, aunque no todas las herramientas de soporte estn presentes.
Respecto a las licencias, tampoco existen limitaciones importantes. Se pueden construir aplicaciones para
cualquiera, distribuirlas como se necesite, comercializarlas, etc. Y respecto a los precios, creemos que son muy
competitivos. Por ejemplo, las versiones Express, estn
valoradas alrededor de los 49$, y SQL Server Express es
gratuito y va a continuar en esa categora, y pensamos
que es un gran valor aadido.
A propsito de estos comentarios, en la revista hemos
tenido ocasin de hablar con otros responsables de Visual
Studio, y hemos observado la presencia comn del trmino entusiasta. Puedes explicarnos exactamente qu
entendis por entusiasta, y sobre todo, cuntos de ellos
tenis censados, como usuarios reales y/o potenciales?
Es curioso que lo comentes, porque recientemente
hemos ponderado el nmero de usuarios que pensamos
que caen dentro de las categoras de aficionados o entusiastas, y la cifra sube hasta aproximadamente los 18
millones, en todo el mundo. Son desarrolladores no profesionales, con distintos perfiles: desde el usuario avanzado, el principiante, el administrador de sistemas que
quiere tener capacidades extendidas de administracin
mediante programas, etc.
Has mencionado un nuevo elemento dentro del
men principal de Visual Studio, que tuve ocasin de
comprobar desde las primeras betas, y que est relacionado con la Comunidad (de hecho, se llama as).
Significa eso una voluntad por parte de Microsoft para
abrir lo ms posible los recursos comunitarios de desarrolladores? Vais a continuar con esa lnea?
Hemos estado pensando cmo potenciar los recursos comunitarios vinculados con las herramientas de
desarrollo, y hemos contactado con un gran nmero de
partners para conseguir que esa idea se pudiera expresar de forma clara en el nuevo Visual Studio 2005. Eso
nos llev a incluir esas nuevas opciones e incluso otras,
como los llamados kits de inicio, que pueden verse en la
pgina principal de todos las ediciones de Visual Studio,
incluyendo las Express.
Tiene eso algo que ver con una iniciativa llamada
Coding for fun?
En efecto. Es una idea con soporte Web, que tiene
por objeto suministrar contenidos interesantes en trminos de artculos, cdigo fuente, etc., para que la gente lo pueda incluir en sus propios proyectos. Ahora (primeros de julio/05) ya tenemos una treintena de artculos disponibles y pensamos ir aumentando a un ritmo de
unos dos o tres por semana. Queremos que se mantenga vivo, aadiendo adems, video webcasts, similares a los
que publica Channel9.
Hablemos acerca de lenguajes. Piensas que el lenguaje J# ha evolucionado en su aceptacin en la forma
esperada por Microsoft? Cules son las estadsticas de
uso actuales?
<< dnm.directo.entrevistas
que es quien est desarrollando esa caracterstica. Es una de las herramientas que
se consideran como recursos aadidos y,
a veces, el canal de distribucin, o los
calendarios pactados no permiten que
ciertos elementos aparezcan en las betas,
aunque luego estn en el producto final.
De hecho tambin va a figurar en todas
las versiones Express de los productos.
Aunque ADO.NET no parece haber
cambiado excesivamente desde la versin
anterior, ASP.NET s que ha sufrido un
montn de cambios, nuevos modelos de
compilacin, edicin, desarrollo y distribucin, ms de 60 controles de servidor
aadidos, etc. Supone eso que ASP.NET
estaba inmaduro respecto a ADO.NET?
Lo que pasa, a veces, es que lleva tiempo averiguar cmo la gente va a utilizar
una tecnologa. El equipo de desarrollo
de ASP.NET es uno de los mejores de
Microsoft en trminos de mirar qu es lo
que estn haciendo los clientes, analizarlo y determinar cules son las necesidades. De esa forma, hemos sido capaces de
reducir el cdigo necesario en alrededor
de un 70% para esta versin. Cada versin nueva es mejor que la anterior, porque aprende de los errores cometidos y ve
las carencias con ms claridad.
Aunque no soy muy aficionado a las
preguntas tpicas, a veces parecen inevitables las comparativas. Podras citar las que
para ti son las 3 mejores caractersticas
de la nueva versin, respecto a cuatro puntos concretos: Windows, ASP.NET,
ADO.NET y aplicaciones para mviles?
Para Windows, la distribucin ClickOnce; en ASP.NET, el nmero de nuevos
controles, junto a los kits de inicio; en
ADO.NET, quizs la capacidad de devolver objetos DataTable como valor de retorno de un servicio Web; y respecto a las
aplicaciones para dispositivos mviles, me
gustan especialmente el nuevo emulador,
que es capaz de funcionar en un Virtual
PC, y el soporte de Platform/Invoke para
soportar mensajes SMS.
Para concluir, puedes decirnos algo
acerca de las implicaciones en la adopcin
por parte de los equipos de desarrollo del
nuevo Visual Studio Team System? Por
ejemplo, no me parece que muchos de
esos entusiastas que citbamos antes vayan
a ir por ese camino inmediatamente, debido a la curva de aprendizaje
Es cierto, yo tampoco lo creo. Pienso
que es una herramienta para equipos de
desarrollo ms experimentados, y mayores en volumen que el programador individual. Entre otras cosas, porque requiere conocimientos del ciclo de vida correcto de las aplicaciones, de las que llamamos
best practices, etc. Somos conscientes de
esto, as como de que existe un enorme
trabajo que hacer todava para las prximas versiones en trminos de facilidad de
uso, de caractersticas de instalacin
(recordemos que en la Beta 1 se requeran 3 mquinas distintas para su instalacin, aunque en esta Beta 2, ya slo hace
falta una), etc.
Pero pienso que para el momento
en que el producto est oficialmente en
la calle, vamos a disponer de una excelente herramienta, muy fcil de usar,
considerando las capacidades que tiene,
y que va a suponer una herramienta de
un valor aadido fantstico para nuestros clientes.
<<dotNetMana
13
dnm.plataforma.net
Marino Posadas
Novedades en la seguridad en
Visual Studio 2005
.NET es una plataforma que naci con la seguridad en mente, por su propio diseo.
En la ejecucin del cdigo (Code Access Security o CAS), en los metadatos que cada
ensamblado especifica de cara a garantizar restricciones en la ejecucin y en un modelo de especificacin de polticas de ejecucin muy configurable.Esta nueva versin contiene novedades y extiende otros conceptos ya presentes, dando a la plataforma un
tono de solidez nico hasta ahora.
<< Podramos dividir en dos categoras las nuevas caractersticas de seguridad, dependiendo del tipo de cdigo a analizar: nativo o administrado. No vamos a tocar
aqu las propias del cdigo nativo, pero s recordar
que, para programadores de C++, la nueva herramienta de anlisis de cdigo que se incluye en Visual
Studio Team System, posee un montn de atractivas novedades en ese sentido. Por una parte, vamos
a comentar brevemente la seguridad del propio
Framework 2.0. Despus, veremos algunos cambios
en Visual Studio 2005.
Marino Posadas es
asesor tcnico y
redactor de
dotNetMana, MVP de
C# y formador de
Alhambra-Eidos
AccessControl
Dentro del espacio System.Security, el namespace AccessControl suministra acceso mediante cdigo
a las ACL (Access Control List) del sistema, no slo en
lectura, sino permitiendo la creacin de nuevos objetos, la toma de control sobre objetos existentes, y la
posibilidad de convertir cadenas SDDL (Security
Descriptor Description Language) en descriptores binarios y viceversa. De hecho, todos los objetos en los
que la seguridad era importante, disponen desde esta
versin de dos nuevos mtodos: GetAccessControl()
y SetAccessControl().
Muchos otros aspectos que no podemos destacar
por la falta de espacio: la clase NegotiateStream, perteneciente a System.Net.Security, permite ahora crear canales seguros de comunicacin para facilitar la
implementacin de Kerberos o SSL en las aplicaciones. En el apartado de la criptografa, las nuevas clases ProtectedData y ProtectedMemory hacen uso directo de DPAPI, y existen novedades como la no necesidad de CAPICOM (el API de criptografa basado
en un mdulo de Interop), para manejar certificados y
mensajes.
<< dnm.plataforma.net
Otras primicias agradables, las
encontramos en los espacios de nombres System.Diagnostics (donde la clase Process permite una llamada directa a CreateProcessWithLogonW , sin
necesidad de Platform/Invoke), o en
System.DirectoryServices y System.Web,
donde podemos usar DPAPI para cifrar
secciones de ficheros Web.Config, con
cdigo de este tipo:
comprobar hasta qu punto un cdigo cumpla con los principios de diseo recomendados. A partir de ahora,
se integra en las ventanas de configuracin de propiedades del proyecto,
donde, adems, podemos observar una
solapa especial Security, dedicada
fundamentalmente a la distribucin
ClickOnce y la forma de garantizar su
ajuste fino.
//fichero Web.Config
<configuration>
<appSettings>
<add key='pwd' value='secreto'/>
</appSettings>
</configuration>
// manejo de Web.config
string configFilePath = null;
Configuration config =
Configuration.GetExeConfiguration(path,ConfigurationUserLevel.None);
config.AppSettings.ProtectSection(ProtectedConfiguration.DataProtectionProviderName);
config.Update();
Figura 2
Seguridad en el IDE
FXCop: Una herramienta de obligado cumplimiento
FxCop se haba estado usando
como herramienta independiente para
<<dotNetMana
//fichero de salida
<configuration>
<protectedData>
<protectedDataSections>
<add name="appSettings" provider="DataProtectionConfigurationProvider" />
</protectedDataSections>
</protectedData>
<appSettings>
<EncryptedData>
<CipherData>
<CipherValue>AQAAA...</CipherValue>
</CipherData>
</EncryptedData>
</appSettings>
</configuration>
15
dnm.plataforma.net
Jos Murillo
Jose Murillo
Es ISV Developer Advisor en la
Divisin de Desarrollo y
Plataforma (DPE) de Microsoft
Ibrica.Su objetivo es ayudar a los
fabricantes de software (ISVs) en
la implementacin de tecnologas
Microsoft,especialmente sobre la
plataforma de desarrollo .NET.
La transicin de 32 a 64 bits es tan inminente e inevitable como fue en su momento la de 16 a 32 bits, aunque afortunadamente ya podemos anticipar que no ser
tan compleja, sobre todo para aplicaciones desarrolladas con cdigo manejado.
Las ventajas de los 64 bits son varias: desde poder
direccionar hasta 8 TB (s, TeraBytes!) frente a los
clsicos 3 GB de los procesadores de 32 bits, incluso permitir escalar verticalmente nuestro servidor
hasta nuevos lmites. Un ejemplo: este incremento
de memoria permite al sistema operativo pasar de
un mximo de 115.000 conexiones TCP/IP simultneas a ms de 1.000.000 en Windows Server 2003.
En un escenario de un servidor Web con ASP.NET,
el cambio a 64 bits no supondra slo ventajas para
nuestra aplicacin en cuanto al uso de memoria,
sino sobre todo en el rendimiento y escalabilidad
de nuestra Web.
Dentro de los sistemas de 64 bits podemos diferenciar dos arquitecturas completamente diferentes,
cada una con sus ventajas e inconvenientes, pero sobre
todo destinadas a dos escenarios claramente diferenciados. Es fundamental conocer cules son nuestros
objetivos y prioridades antes de decantarnos por una u
otra arquitectura.
Por un lado nos podemos encontrar con los sistemas basados en procesadores extendidos, los conocidos
como x64, basados en la tecnologa EM64T (Extended
Memory 64 Technology). Ejemplos de stos son los sistemas basados en Intel Xeon, Pentium 4 x64 o AMD Athlon
<< dnm.plataforma.net
<<dotNetMana
17
dnm.asp.net
Jos M.Alarcn
Los nuevos controles Web incrementan la productividad de forma espectacular tanto en tratamiento y visualizacin de datos como en
cuestiones relativas a seguridad.
Dicho esto vamos a conocer las novedades ms
importantes. Empezaremos por las menos obvias
pero an as significativas, e iremos viendo las ms
espectaculares al final para mantener as la tensin
dramtica ;-)
<< dnm.asp.net
Si nos fijamos, ahora ya no se utiliza el atributo CodeBehind que apareca en esta directiva en las pginas de
la versin 1.x. En su lugar se utiliza el
atributo Codefile que indica tambin
en qu archivo est la funcionalidad
asociada a esta interfaz de usuario. Si
indican lo mismo: a qu se debe este
cambio?.
Si examinamos el archivo de cdigo
(.cs o .vb) asociado a la pgina, veremos que tiene muchas menos lneas y
es ms sencillo de leer (ms limpio)
que el de versiones anteriores, tal y
como se observa en la figura 1. En esta
misma figura podemos contemplar que
incluso la versin de Visual Basic es
todava ms limpia que la de C# al no
incluir siquiera sentencias Imports mientras que la de C# lleva varios using.
Ahora Visual Studio nos permite disponer del cdigo y la interfaz en el mismo archivo si lo deseamos; cosa que
antes no era posible desde el entorno.
Tambin nos deja mezclar cdigo y
pginas escritas en diferentes lenguajes
al mismo tiempo, depurando la aplicacin en todas ellas a la vez.
Se han definido una serie de carpetas en el raz de las aplicaciones que tienen un significado especial. Por ejemplo, si creamos una carpeta llamada
App_code, todo archivo de cdigo fuente que coloquemos en ella se compilar
automticamente y estar disponible
para su uso desde las pginas del sitio
Web. Se pueden mezclar ah archivos
de cdigo escritos en diferentes lenguajes e incluso, slo con dejar en ella
los archivos .wsdl y .xsd que definen un
servicio Web se crea de forma automtica un proxy para poder utilizarlo (aunque no veremos el cdigo auto-generado s podremos hacer uso de l). Aunque
para esto ltimo ya existe una carpeta
especial llamada App_WebReferences que
nos permitir mantener ordenadas nuestras referencias a servicios. Como
vemos todas estas carpetas llevan el
prefijo App_. Existen muchas otras
como App_Data, App_GlobalResources,
App_LocalResources o App_Themes.
Con ASP.NET 2.0 se proporciona
una herramienta de precompilacin de
sitios Web (Aspnet_compiler.exe). Gracias
a ello podemos precompilar nuestras aplicaciones evitando la compilacin dinmica y por tanto reduciendo el tiempo de
inicio de ejecucin de las mismas (no se
generan las pginas bajo demanda).
Adems proporciona un modo de precompilacin especial para distribuir aplicaciones que elimina todo rastro de nuestro cdigo (incluso del HTML de las pgi-
<<dotNetMana
ra a mantener todo lo relativo a una clase dentro del mismo lugar. Esta caracterstica a simple vista puede parecer una
nimiedad, pero realmente tiene gran
inters ya que permite cosas como
repartir el trabajo de una clase entre
varios programadores, o caractersticas
como el nuevo modelo de soporte de
cdigo que mencionamos.
En las pginas ASPX de la versin
2.0 hay una directiva Page anloga a la
siguiente:
19
<< dnm.asp.net
nas ASPX) y nos facilita su despliegue con XCopy protegiendo nuestra propiedad intelectual.
Las nuevas clases de manipulacin de archivos de
configuracin mejoran nuestras capacidades para crear asistentes de configuracin e instaladores de aplicaciones. Ahora existe tambin una zona concreta dentro del archivo de configuracin que se usa para almacenar cadenas de conexin a bases de datos, facilitando su acceso. A esto se une la capacidad de ASP.NET
2.0 para cifrar y descifrar automticamente zonas enteras de web.config usando DPAPI, por lo que se mejora mucho la seguridad ante el robo de estos archivos.
<<dotNetMana
Internacionalizacin
20
Otra gran novedad de ASP.NET 2.0 es la renovada capacidad de internacionalizacin de aplicaciones que es ms fcil que nunca. Podemos conseguir que los elementos de la interfaz se adapten
automticamente a las preferencias de idioma del
navegador de los usuarios creando archivos de
recursos para cada idioma y colocndolos en una
carpeta especial.
<< dnm.asp.net
Existen recursos locales (para pginas
concretas) y globales (utilizables desde
cualquier lugar). Las carpetas especiales
para ellos son respectivamente App_
LocalResources y App_GlobalResources.
Los archivos de recursos tienen extensin
.resx y poseen un editor propio (figura 4)
que permite aadir no slo cadenas de texto, sino iconos, imgenes y sonidos especficos de cada cultura.
Descripcin
SqlDataSource
AccessDataSource
ObjectDataSource
XmlDataSource
SiteMapDataSource
<<dotNetMana
<globalization uiCulture="auto"/>
21
<< dnm.asp.net
NOTA
Aunque normalmente soy partidario de utilizar
los trminos en castellano siempre que los haya, en
este caso hago una excepcin y empleo siempre el
trmino anglosajn Master Pages (o MP) para referirme a esta caracterstica. El motivo es que este
trmino es el ms aceptado y el que veremos con
ms frecuencia y adems considero que la traduccin Pginas principales elegida por Microsoft no
ha sido la ms afortunada.
<<dotNetMana
22
Figura 5.Al editar una pgina que hace uso de una Master Page slo podremos modificar aquellas zonas definidas para contenidos en la plantilla.
<< dnm.asp.net
Conseguiremos que las pginas que lo apliquen dispongan de controles TextBox con el fondo gris claro y
el borde punteado de 1 pxel de ancho. Al igual que en
las CSS es posible definir diferentes clases para un mismo tipo de control y aplicarlas selectivamente.
Para que una pgina se adapte automticamente
a un tema definido en la carpeta App_Themes lo nico
que tenemos que hacer es asignar un atributo Theme
en la directiva de la pgina, as:
<% @ Page Theme="MiTema" Language="VB" AutoEventWireup="false"
CodeFile="Default.aspx.vb" Inherits="_Default" %>
<<dotNetMana
menta a la perfeccin con las Master Pages para solventar el problema del aspecto: los temas y mscaras
de controles Web.
La funcionalidad ofrecida por los temas de
ASP.NET 2.0 se entiende fcilmente si los asemejamos
con las hojas de estilo. Los temas de ASP.NET son como
hojas de estilo que se aplican a controles Web y sus elementos tienen una sintaxis prcticamente idntica a la
de los controles cuyo aspecto definen.
Un tema de ASP.NET 2.0 est formado por uno
o varios archivos de tipo .skin junto con las imgenes y hojas de estilo CSS que stos utilicen, que se
almacenan dentro de una carpeta con el nombre del
tema y que a su vez est contenida en una carpeta
especial de nombre App_Themes. Por ejemplo, la figura 6 muestra una carpeta App_Themes que contiene dos
temas y cada uno de ellos a su vez contiene un archivo .skin, hojas CSS y grficos especficos del tema.
23
<< dnm.asp.net
usuarios que nos evita tener que reinventar la rueda en cada aplicacin. La
clase Membership proporciona una sencilla interfaz de programacin para
almacenar y recuperar informacin
sobre los usuarios de nuestras aplicaciones. Lo ms interesante de todo es
que, al igual que muchas otras caractersticas nuevas de ASP.NET 2.0, est
basada en un patrn de diseo de proveedores, lo que permite cambiar los
mtodos de trabajo y almacenamiento sin tocar el cdigo de la aplicacin.
Es decir, abstrae la funcionalidad del
soporte fsico utilizado para implementarla. As, por defecto esta API
utiliza SQL Server 2005 para almacenar toda la informacin de seguridad
de una aplicacin. Pero dada su arquitectura basada en proveedores podemos cambiar el modo de gestin con
slo un ajuste en el archivo de configuracin. Incluso, es posible definir
mtodos de gestin de usuarios propios sin modificar el cdigo de nuestras aplicaciones. Esto nos permite
reutilizar infraestructuras de seguridad preexistentes que hubisemos creado para ASP.NET 1.x sin perder el
trabajo.
Membership consta de un conjunto de
mtodos estticos (compartidos) para
poder crear, eliminar y validar usuarios
entre otras cosas. As, por ejemplo, para
crear un usuario escribiramos:
Membership.CreateUser("usuario", "clave")
<<dotNetMana
Membership.ValidateUser("usuario", "clave")
24
En resumen
En este artculo hemos tratado de llamar la
atencin sobre lo ms
sobresaliente que ofrecen
ASP.NET 2.0 y Visual
Figura 7.Aspecto de la herramienta de configuracin de
Web Developer 2005
seguridad que viene con ASP.NET 2.0.
(que es como se llama la
parte de Visual Studio
dedicada a desarrollo
Pero tal vez lo ms espectacular
Web y que est separada de lo dems por
relacionado con la seguridad sean los
completo). An siendo un texto bastante
extenso para lo habitual en una revista slo
nuevos controles de seguridad (bautihemos rascado un poco la superficie, y nos
zados como de inicio de sesin).
hemos dejado en el teclado muchas cosas
Estos controles nos dan ya hechas
por comentar. Si bien la mayora son
multitud de operaciones comunes de
pequeos detalles comparado con todo lo
seguridad relacionadas con la interfaz
visto aqu, todos ellos contribuyen a que
de usuario. Por ejemplo, el control
Login permite disponer de un comel nuevo entorno sea el mejor que hemos
pleto dilogo de autenticacin con
visto nunca, lleno de destellos de calidad
slo arrastrarlo sobre un formulario
por doquier.
Web. El CreateUserWizard es un asisSiga atento a dotNetMana y en los
tente con varios pasos que permite la
prximos nmeros iremos desgranando
creacin automtica de nuevos usuapara usted con mayor detalle cada una de
rios. El control LoginView permite perestas novedades. Esperamos que tras leer
sonalizar lo que ven los usuarios en
este texto, como mnimo, est deseando
funcin de los roles a los que pertedescargar la versin gratuita del entorno
nezcan. Y todava hay unos cuantos
(Visual Web Developer 2005 Express) para
ms. Lo mejor es verlos en funcionaempezar a experimentar algunas de las
miento. Son realmente tiles.
caractersticas comentadas. Puede leer
Todos ellos permiten la personalisobre ella en el artculo de Sergio
zacin, tanto parcial por medio de
Vzquez. Ah podr encontrar tambin
propiedades, como absoluta usando
una tabla comparativa de versiones.
plantillas. En el caso de los asistentes
Siga sintonizndonos.
dnm.asp.net
Braulio Dez
Reyes Garca
Reyes Garca
Ha sido consultora todo
terreno. Hoy da se dedica al
gratificante mundo de la
docencia.
Braulio Dez
colabora habitualmente con
dotNetMana. Es MCSD en
programacin distribuida
con Visual C++.
Trabaja como Solutions
Developer de Avanade.
Mejora
Principal
<<dotNetMana
25
<< dnm.asp.net
foto mostramos el seleccionado en ese
momento, el cambio de seleccin y la
carga de la foto lo realizamos usando
llamadas fuera de banda (ver figura 3).
Pginas asncronas
<<dotNetMana
26
Figura 5. Servidor web bloqueado por un nmero limitado de peticiones de pginas con
procesos asncronos
<< dnm.asp.net
Sirve Para
Extraer temporalmente de la cola de pginas a procesar aquella que est esperando respuestas de procesos asncronos (ej. llamada a servicio Web, o proceso pesado de base de datos).
Mejora
Principal
Fuente 2. (.CS, code-behind) Registramos la tarea asncrona, le decimos que hacer al arrancar y que hacer al
finalizar la tarea.
Otra ventaja de utilizar pginas asncronas es que podemos lanzar todas las
peticiones asncronas en paralelo, y que
el Framework se encarge de avisarnos
cuando estn todas listas, en vez de ir
lanzndolas una a una.
De la Web de dotNetMana puedes descargar un ejemplo que procesa
de forma asncrona una llamada a un
servicio Web de Amazon (en fuente 1 y
2 puedes ver fragmentos del mismo).
Cach 2.0
Cuando subimos una aplicacin a
produccin, una de los detalles que
debemos tener en cuenta es el asignarle cach a ciertas pginas y ciertos datos,
para que el servidor tarde menos en procesar las respuestas, y minimizar el trfico entre nuestra aplicacin y el servidor de base de datos.
Como funciona la cach en ASPX
1.1? Bsicamente consiste en coger una
pgina, o un segmento de datos (por
ejemplo un DataTable que contuviera la
lista de delegaciones de nuestra empresa), y en vez de hacer que nuestra aplicacin lea de la base de datos cada vez
que se hiciera una peticin, mantenerlo en memoria por un tiempo (por ejemplo 3 minutos). Esta aproximacin hace
que nuestro servidor tarde muy poco en
generar una pgina, ya que lo tiene todo
preparado para montarla o incluso la
tiene ya montada. El problema aqu es
que, al darle un tiempo fijo de validez a
la cach, si el cambio de unos datos es
crtico para el negocio, tenemos o bien
que no usar cach o darle un tiempo de
vida muy corto.
Si mal no recuerdo, en un sitio Web
de visitas masivas, la pgina principal la
tenan en cach por 5 segundos, lo que
haca que se pudieran responder muchas
ms peticiones, pero y si pudiramos
mantener dicha cach hasta que realmente cambiaran los datos? Eso mismo
es lo que incorpora la cach en ASPX
2.0, dialoga con SQL Server e invalida
una cach cuando su fuente de datos a
cambiado, esto nos lo proporciona de
dos formas:
Para SQL Server 7.0 y 2000: El sistema de cach funciona a nivel de tabla,
y ASP.NET pregunta cada <x> segundos si ha habido cambios en la tabla
<<dotNetMana
Pginas asncronas
27
<< dnm.asp.net
Cache 2.0
Para SQL Server 2005: Se puede afinar a nivel de fila de una tabla, y
SQL Server, mediante Notification
Delivery Services, es el que nos avisa
cuando los datos han cambiado; esto
es mucho ms ptimo que el primer
Sirve Para
Mejora
Principal
ViewState
Una de las caractersticas mas valoradas y odiadas de ASP.NET es, sin
duda alguna, el "View State". Por un
lado nos permite guardar informacin
sobre el estado y aspecto de nuestros
controles, as como informacin propia
de la aplicacin a nivel de pgina/estado. Por otro lado, toda est informacin
viaja en un campo escondido de la pgiViewState
Sirve Para
<<dotNetMana
28
Mejora
Principal
Obervaciones Para hacer uso de esta mejora slo tenemos que compilar nuestra aplicacin en
VStudio 2005.
<< dnm.asp.net
na generada para el usuario, con lo que, si nos descuidamos, el tamao de nuestra pgina en Kb se puede disparar. Un ejemplo de este caso se da al usar controles pesados como el DataGrid.
En la versin 2.0 se ha optimizado la serializacin
del ViewState, llegando a reducirse al 50 % del tamao generado en la versin 1.1.
Lo mejor de todo esto es que, para hacer uso del
nuevo ViewState, lo nico que tenemos que hacer es
recompilar nuestra aplicacin con Visual Studio 2005.
Precompilacin de pginas
Con ASP.NET 1.1, cuando nuestra aplicacin recibe la primera peticin, las pginas ASPX son parseadas
y precompiladas a cdigo intermedio, con lo que el
tiempo de respuesta de cara al cliente es malsimo. Si
esto slo ocurre la primera vez, por qu preocuparnos.? Bueno seguro que esa primera vez coincide con
una demo que estamos haciendo, o con que uno de los
gerentes de la empresa tiene acceso para probarlo como
un piloto, mejor ponerle remedio.
ASP.NET 2.0 nos da la oportunidad de precompilar los ASPX, con lo que obtenemos las siguientes
ventajas:
La primera peticin que recibamos se ejecuta igual
de rpido que cualquier otra.
Evitamos que aparezcan errores de compilacin
de pginas en el servidor en produccin.
Llamadas fuera
de banda
Para saber ms
Precompilacin
Evitar que las pginas se compilen en la primera peticin.
Mejora
Principal
Tiempo de respuesta: Evita el que la primera peticin de una pgina ASPX sea
muy lenta.
Obervaciones
View State
<<dotNetMana
Sirve Para
29
dnm.laboratorio.net
Sergio Vzquez
Sergio Vzquez
Sergio trabaja de Consultor Ebusiness en Pangeaes.com. Es
Ingeniero Superior en
Informtica, MCP y Webmaster
del sitio Web
http://www.mutisdotnet.com sobre
tecnologas .net.Tambin es
Vicepresidente del GUSE.NET.
<< dnm.laboratorio.net
En la ventana de dilogo del nuevo sitio Web puedes especificar la localizacin del sitio Web que puede ser:
Un directorio local de tu PC.
Un sitio Web remoto conectado con las extensiones de servidor de FrontPage.
Un sitio Web remoto conectado va FTP.
Cuando ejecutas una pgina, Visual Web
Developer lanza el servidor interno de desarrollo que
acepta solo peticiones HTTP del propio equipo pero
se puede configurar para que use este mini servidor
Web o bien IIS.
<<dotNetMana
31
<< dnm.laboratorio.net
EdicionesVisual Studio 2005
Team System1 Professional Standard
Express2
Coloreo de cdigo e
Intellisense
Lenguajes:Visual Basic,C#,
C++,J#
Individualmente.
VWD:VB, C# y J#
Proyectos Windows
Proyectos Web
nicamente con
Visual Web Dev
Proyectos Mobile
SQL Server
Express Edition
SQL Server
Express Edition
Diseadores visuales de
datos
Depuracin Remota
VSTMOS
20053
Requerir
MSDN
Premium
Anlisis de Cdigo
Administracin de proyectos
SQL
Server
Developer Edition
2005
Software
Procesador
Mnimo
Procesador de tipo Pentium a 600 MHz
Recomendado
Procesador de tipo Pentium a 1 GHz
Sistema Operativo
Windows 2000 SP4
Windows 2003 Server
Windows XP SP2
Windows Vista
Espacio en disco
500 Mb
La instalacin completa ocupa 1.3Gb
<<dotNetMana
RAM
Mnimo 128Mb
Recomendado 256 Mb
32
Pantalla
Mnimo
800 x 600, 256 colores
Recomendado:
1024 x 768, color de alta densidad de 16 bits
Conclusiones
En este artculo hemos visto que con este entorno
integrado que incluye motor de base de datos gratuito,
herramienta de desarrollo Web, servidor Web y ejemplos de pruebas, no necesitamos mucho ms para poder
empezar a desarrollar aplicaciones Web con ASP.NET
2.0 que no requieren equipos de desarrollo con rapidez.
Si queris ms detalles sobre los Skins, Master Pages
y los nuevos controles podis consultar el artculo de
Jos M. Alarcn. Para desarrollar aplicaciones ms grandes y complejas que requieran alta disponibilidad y rendimiento se encuentran las versiones Standard, Professional
y Team System que se describen en el artculo de Javier
Izquierdo, responsable de producto en Microsoft.
dnm.directo.entrevistas
Marino Posadas
Marino Posadas es
asesor tcnico y
redactor de
dotNetMana, MVP de
C# y formador de
Alhambra-Eidos
<< dnm.directo.entrevistas
Los usuarios muchas veces son reticentes hacia las nuevas
versiones debido a
problemas con las
migraciones y las dificultades que surgen de
estos procesos. Podis decir algunas
palabras de esperanza
para aquellos que
quieran realizar miMike Hernndez, Community Program Manager de VSTO
graciones?
Lo mejor que poRespecto a Office 12, qu es lo
demos decir es que no se necesita ningn
que podis aportar de cara al desarrotipo de migracin. Todo el cdigo creallo? Seguir siendo compatible hacia
do para la versin anterior, compilar peratrs?
fectamente en esta nueva versin. Hay
Pensamos sacar una nueva beta de
cosas que han cambiado para aprovechar
VSTO con la beta de Office 12. Y tras
las nuevas caractersticas. Muchas veces,
eso, tendremos la versin final, con
asociadas a novedades del propio Visual
Orcas (o Visual Studio 9). De hecho en
Studio 2005.
el PDC mostramos una versin de
Estarn disponibles todas las caracVisual Studio Orcas que soportaba
tersticas del modelo de objetos de cada
Office 12.
aplicacin para los distintos proyectos,
En conclusin, cules dirais que
de forma sencilla?
son los mejores argumentos para aniS todo lo que se presenta en el
marse a dar el paso a esta nueva vermodelo de objetos estar disponible
sin?
tambin para los desarrolladores de
Supongo que todas las novedades de
aplicaciones VSTO,
cara al desarrollador vinculadas a Visual
sin limitaciones, a
Studio 2005, por un lado, y otras caractravs de los PIA
tersticas como la seguridad, producti(Primary Interop
vidad, nuevos controles y entorno mejoAssemblies). Pero van
rado. Adems del soporte de proyectos
a poderse utilizar
Outlook, que es una de las cosas que los
tambin los nuevos
clientes ms nos haban solicitado.
controles presentaTambin habra que citar el nuevo y
dos por esta versin,
mejorado Modelo de Programacin, las
y tambin hemos
mejoras de los Action Panes, y nuevas
aadido un mejor
caractersticas del los mecanismos de
modelo de prograenlace a datos.
macin vinculado
Digamos que ahora, cualquier proDonald D. Drake, Director del equipo de desarrollo de VSTO con los Action Panes
gramador que sepa hacer algo con
y los Smart Tags.
Windows Forms, ser capaz de escribir
Dispondremos
aplicaciones VSTO con extrema facide facilidades para utilizar las macros
Qu es exactamente el Editor de
lidad. Adems, todos nuestros conde tipo VBA?
Manifiestos de Aplicacin, del que
troles se comportan como controles
Existe un soporte de macros, pero si
hemos odo hablar?
estndar, con sus propiedades, mtola pregunta es en el sentido de si se elimiLa informacin de metadatos de
dos, eventos, etc.
na VBA, te dir que no, que VBA estar
ensamblado no era sencilla de modifiSe espera nuevo soporte para
disponible bastante tiempo todava. Lo
car y con este editor permitimos que el
otras aplicaciones de Office, en el
que no se va a hacer es mejorarlo en ninprogramador la modifique ms fcil y
futuro?
guna forma, eso no tiene sentido. Ser
sencillamente. Es informacin que conS, en el PDC se anunci el futuposible, eso s, utilizar los nuevos objetos
tiene datos como, por ejemplo, a qu
ro soporte para todas las aplicaciones
del modelo desde el VBA existente, pero
ensamblados est vinculada la aplicade Office, dentro de la siguiente vereso es todo. El lenguaje, el entorno, y el
cin, caractersticas de distribucin, versin de VSTO.
runtime no cambian.
siones, etc.
<<dotNetMana
35
dnm.lenguajes.csharp
Octavio Hernndez
Novedades en el estndar de C#
Este artculo presenta de manera concisa las novedades fundamentales que ofrece al desarrollador la nueva versin del lenguaje C#, caractersticas que ya estaban
implementadas casi completamente en las diferentes versiones beta de Visual Studio
2005 que hemos ido probando hasta la fecha, y que ahora reciben el espaldarazo
natural que representa su estandarizacin.
Introduccin
Octavio Hernndez
es colaborador habitual
de dotNetMana,
Ingeniero en Informtica
de Sistemas y MVP de
C#.Actualmente es
Director Tcnico de
Danysoft
Genericidad
Sin duda alguna, la ms importante de todas las
novedades presentes en C# 2.0 es la genericidad. Por
ello la tratamos ms en profundidad en este monogrfico con el artculo Reflexionando y haciendo
Reflexin sobre la genericidad de .NET 2.0, de Miguel
Katrib y Mario del Valle.
No es una caracterstica exclusiva de C#; el
hecho de que est implementada a nivel del CLR
ha hecho posible que Visual Basic 2005 la incluya
tambin, al igual que seguramente harn en el futuro otros lenguajes para .NET 2.0.
Se conoce como genericidad (algunas fuentes utilizan el trmino genericidad paramtrica) a la posibilidad de parametrizar clases, estructuras, interfaces o
incluso mtodos en funcin de los tipos de los datos
que estos almacenan y/o manipulan. Por ejemplo, a
continuacin se muestra una posible implementacin
de una lista enlazada de elementos pertenecientes a
un mismo tipo T, el parmetro genrico, que en prin-
<< dnm.lenguajes.csharp
Iteradores
Un iterador es un mecanismo que
se define para permitir recorrer los elementos de un tipo contenedor, de forma que un cliente del tipo pueda obtener una secuencia ordenada de estos.
No describiremos en detalle las posibilidades que ofrece esta caracterstica, ya
que publicamos recientemente un excelente artculo sobre el tema [6]. A modo
de ejemplo, el fuente 3 muestra la programacin de un iterador para nuestra
lista enlazada genrica. Con una implementacin como sa, una aplicacin
cliente podra recorrer los elementos de
una lista del modo que se muestra en el
fuente 4.
Genericidad restringida
Una caracterstica adicional de la
genericidad que no podemos dejar de
mencionar es la posibilidad de establecer
restricciones sobre los tipos parmetros
de los tipos genricos que definamos. Esto
permite garantizar de forma esttica que
los tipos que se utilicen como argumentos de un tipo genrico satisfagan ciertos
requisitos, o ms concretamente, que
implementen una interfaz determinada.
Por ejemplo, el fragmento de cdigo que
se muestra en el fuente 3 establece que el
tipo de los nodos de nuestra lista enlazada debe implementar IComparable.
class Nodo<T> where T: IComparable
{
// implementacin de la clase
}
public class Lista<T> : IEnumerable<T>
where T : IComparable
{
// implementacin de la clase
// enumerador
public IEnumerator<T> GetEnumerator()
{
Nodo<T> n = raz;
while (n != null)
{
yield return n.Dato;
n = n.Siguiente;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Lista<int> listaEnteros =
new Lista<int>();
// Adicin de elementos a la lista
// iterar sobre los elementos de la lista
foreach (int i in listaEnteros)
MessageBox.Show(i.ToString());
<<dotNetMana
37
<< dnm.lenguajes.csharp
cidad: se apoyan en el tipo genrico predefinido
System.Nullable<T>. Internamente, un tipo valor anulable combina un sealizador booleano, al que se accede mediante la propiedad de slo lectura HasValue,
con un campo del tipo valor subyacente, que puede
leerse mediante la propiedad Value. Si HasValue tiene
valor false, se considera que el valor de la variable es
null. Cuando HasValue es true, la propiedad Value
devuelve el valor almacenado.
C# 2.0 incorpora una buena dosis de azcar sintctico para facilitar la utilizacin de estos tipos. Un
tipo valor anulable se declara aadiendo al nombre
del tipo base el modificador ?. Por ejemplo, int ?
es la variante del tipo predefinido int que acepta el
valor nulo. El lenguaje provee conversiones implcitas del literal null y del tipo valor correspondiente a
un tipo valor anulable. Eso hace perfectamente vlidas las instrucciones que conforman el fragmento de
cdigo que se muestra en el fuente 5.
{
int? n = null;
int? m = 275;
if (m.HasValue)
MessageBox.Show("m vale: " + m.Value.ToString());
else
MessageBox.Show("m no tiene valor");
}
Declaraciones parciales
En C# 2.0 es posible dividir la implementacin de
una clase, estructura o interfaz a lo largo de varios ficheros de cdigo fuente. Esta caracterstica puede ser til
de cara a la divisin del trabajo de programacin entre
varios miembros de un equipo o a lograr una mejor organizacin del cdigo fuente. El propio Visual Studio 2005
hace uso de esta caracterstica, separando en dos ficheros el cdigo generado automticamente por el diseador del cdigo y el cdigo introducido por el desarrollador, como puede verse en la figura 1.
<<dotNetMana
38
Cada parte de un tipo parcial debe incluir el modificador partial; ste indica al compilador simplemente
<< dnm.lenguajes.csharp
que pueden existir otras partes del tipo
que debern ser combinadas. Todas esas
partes debern ser compiladas conjuntamente, de manera que el compilador
genere la implementacin completa del
tipo. De esto se desprende que las clases parciales no permiten extender
tipos que ya estn compilados.
Clases estticas
Las clases estticas son una adicin
pequea pero til al lenguaje C#. Su objetivo es permitir marcar explcitamente
(mediante la palabra reservada static)
aquellas clases cuyo objetivo es contener
nicamente entidades estticas (de clase),
para que el compilador impida que se le
aadan por descuido o error miembros de
instancia. Ejemplos clsicos de clases de
la librera de .NET Framework que slo
ofrecen al programador recursos estticos son Math y Monitor.
El fuente 7 muestra un fragmento
de cdigo en el que se define una clase
esttica.
Directivas pragma
Por ltimo, #pragma es una nueva
directiva del preprocesador de C# 2.0,
que puede ser utilizada para indicar
informacin contextual al compilador.
Por ejemplo, mediante directivas pragma es posible:
Activar o desactivar la generacin de
diferentes advertencias del compilador para el cdigo fuente que sigue
a la directiva.
Indicar optimizaciones a aplicar al
cdigo fuente que sigue a la directiva.
Suministrar informacin que pueda
ser utilizada por un depurador.
Conclusin
En este artculo hemos descrito las
principales novedades que incluye la
3 Edicin del estndar ECMA del
lenguaje de programacin C#, implementadas completamente en el compilador de este lenguaje integrado en
.NET 2.0.
Agradecimientos
lar aqu que global no es una nueva palabra reservada del lenguaje, sino un identificador normal, que slo toma un significado especial cuando aparece a la
izquierda de los ::. Lo mismo ocurre con
partial, yield y otros trminos presentados en este artculo, que slo adquieren su significado especial en el contexto adecuado. El objetivo de esta medida es mantener la compatibilidad con
C# 2.0 del cdigo desarrollado para la
versin anterior del lenguaje.
Bibliografa
[1]
[2]
[3]
Lowy J.Create elegant code with anonymous methods,iterators and partial classes,
publicado en MSDN Magazine,Mayo de 2004
[4]
[5]
[6]
<<dotNetMana
39
dnm.plataforma.net
Miguel Katrib
Fuente 1
Aunque el tipo object resulta ser una buena alternativa para agrupar y definir estructuras que sirvan
para objetos de diferentes tipos, beneficiado adems
por la capacidad de boxing-unboxing de .NET que permite de manera transparente tratar a los tipos por
valor en la jerarqua de object, lo cierto es que por su
condicin de clase base de toda jerarqua provoca el
uso excesivo de casts con la degradacin de rendimiento
y la aparicin de errores cuando estos casts se hacen
inadecuadamente.
Por ejemplo, en la lnea 4 del fuente 2 se hace un
cast a int del valor que se extrae de la pila para provocar una divisin entera entre 2. Como slo se adicionaron valores enteros (lnea 3) el cast es correcto y
la divisin se efecta correctamente. Sin embargo, en
la lnea 5 ocurre un error de cast invlido con el tipo
float, pues aunque la asignacin de un entero a float es permitida, el fragmento de cdigo ( float)
<< dnm.plataforma.net
stack.Pop() indica al compilador que debe generar
en IL cdigo para hacer unboxing a un supuesto objeto de tipo Single devuelto por el mtodo Pop, pero
como el objeto devuelto no es Single sino Int32, el
cast no se puede efectuar. El principal problema aqu
es que estos errores aparecern durante la ejecucin
de la aplicacin y no son detectables por el compilador de C#.
Stack stack = new Stack();
for (int i = 0; i < 10; i++)
stack.Push(i);
Console.WriteLine("Divisin entera: {0}",(int) stack.Pop() / 2);
Console.WriteLine("Divisin real: {0}", (float) stack.Pop() / 2);
Fuente 2
Fuente 3
o
delegate void KeyEventHandler( object sender,
KeyEventArgs args)
Sin necesidad de definir un tipo delegate especfico. Como resultado se tendr un evento al que se
le podrn anotar mtodos como el siguiente:
private void MyControl_MouseUp(object sender,
MouseEventArgs args) {...}
Adems de los casos para eventos como el ejemplificado anteriormente, nos encontramos en el .NET
Framework 1.1 clases como ControlCollection herederas de CollectionBase y que han definido sus propios
mtodos Add, Remove, etc., slo para poder lidiar con un
<<dotNetMana
41
<< dnm.plataforma.net
Sin embargo, en C# 2.0, asignaciones como las de los dos ejemplos anteriores no son permitidas, ni se tienen
herramientas en el Framework que faciliten lograr tal efecto.
Al menos convendra tener una
clase que nos permitiera hacer algo
como:
IList<Control> controls =
Converters.TypeConvert<IList<Control>>
(button.ControlsCollection);
o
tipo especfico que represente al tipo de
contenido (Control en el caso de
ControlsCollection) y de este modo no
tener que basarse en los contendores generales que usan el comodn object. La
implementacin de todos estos mtodos
se basa de manera similar en delegar en
un ArrayList (que s se basa en object)
toda su implementacin y hacer internamente los cast correspondientes.
Con el nuevo .NET Framework 2.0
tenemos toda la jerarqua de Collection
genrica, 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 programacin. Sin
embargo, el espacio de nombres
System.Windows.Form no ha sido adaptado a estas nuevas clases genricas y sigue
usando tipos como los delegates antes descritos, y otros como ControlsCollection
y TapPageCollection que representan
colecciones de tipos especficos.
<<dotNetMana
La coexistencia y la transicin
42
podremos usar en contextos no genricos, objetos provenientes de la genericidad y lo contrario usar en contextos genricos objetos provenientes del
mundo no genrico?
Si ahora disponemos de genericidad
entonces sera deseable poder hacer algo
como:
IList<Control> controls =
button.ControlsCollection;
ControlsCollection controls =
Converters.TypeConvert<ControlsCollection>
(new List<Control>());
De no genrico a genrico y
viceversa
Una forma de resolver la asignacin de objetos no genricos basados
en el uso de object o de algn tipo
especfico como Control en el caso de
ControlsCollection a variables definidas a partir de un tipo genrico es creando una clase que haga de intermediaria (proxy), como por ejemplo la clase ControlList del fuente 4.
Fuente 4
<< dnm.plataforma.net
Note que los mtodos delegan su implementacin
en un objeto de tipo ControlsCollection. De esta forma la
asignacin puede realizarse de la siguiente manera:
IList<Control> controls = new
ControlList(button.ControlsCollection);
Fuente 5
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
<<dotNetMana
43
<< dnm.plataforma.net
La estrategia que se sigue en la implementacin
de EmitMethods para emitir cada mtodo es buscar cada
mtodo abstract o virtual de la clase que se de como
tipo target y por cada uno se busca en la clase que
define al tipo del objeto a convertir, algn mtodo que
coincida en nombre y signatura. Si tal mtodo existe,
entonces se emite en la clase Proxy un mtodo que
redefine al mtodo de la clase target y cuya implementacin delega en el mtodo correspondiente del
objeto a convertir (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 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
Fuente 10
<<dotNetMana
44
<< dnm.plataforma.net
class C : A
{
protected B b;
public C(...){
this.b = new B(...);
}
...
public static implicit operator B (C c){
return c.b;
}
}
Fuente 11
Con la genericidad podemos generizar el patrn anterior. Podemos definir una clase genrica A<T> que sirva para
todo aquel que quiera heredar de A y de
alguien ms (fuente 12)
Fuente 12
En este caso lo que hay que hacer ahora es heredar de A<T> instanciando el parmetro genrico T con el otro tipo del cual
se quera heredar adems de A.
class C : A<B> {...}
La herencia mltiple es un
recurso ausente en .NET
y sus lenguajes, pero
podemos simularla con la
ayuda de la genericidad
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 13
Simulando la redefinicin de
mtodos
En una situacin de herencia mltiple real en la que C heredase de A y B, un
mtodo virtual F definido en B puede ser
redefinido en C de forma que al hacer:
B unB = new C();
...
unB.F(...);
es que se aplica el conversor implcito que lo que hace es devolver el objeto interno b que es de tipo InnerB (que
hereda de B) y que por tanto se puede
asignar a unB que es de tipo B.
Si ahora se hace entonces unB.F(...)
lo que ocurre es que se llama al F definido en InnerB que lo que hace a su vez
es llamar al c.F(...) logrndose el efecto del polimorfismo.
Podemos llevar esta solucin al
patrn genrico visto anteriormente?
Note (fuente 13) que al redefinir F en
C es porque sabemos quin es la clase de
la cual queramos simular herencia mltiple (B en este caso) y que sabemos que
esta clase tiene un F. Cmo saber si el
tipo con el que vamos a instanciar al parmetro genrico T tiene un mtodo F? El
recurso de genericidad restringida where
de C# 2.0 parece ayudarnos a acercarnos
a una solucin La idea es no permitir que
cualquier tipo pueda usarse para instanciar a la clase genrica sino slo aquellos
que cumplan con las restricciones indicadas (fuente 14).
<<dotNetMana
45
<< 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
class A<T> : A
where T : HasF, new()
{
protected T t;
public A(){
this.t=Converters.TypeConvert<T>(this);
}
public virtual void F(...) {}
}
Fuente 16
class A<T> : A
where T : IHasF, new()
{
protected InnerT t;
public A(){
this.t = new InnerT(this);
}
public virtual void F(...) {}
class InnerT : T { // Error: No se puede heredar de T porque es un parmetro genrico
A<T> at;
public InnerT(A<T> at){
this.at = at;
}
public override void F(...){
at.F(...);
}
}
}
<<dotNetMana
Fuente 15
46
Y tanto nadar para ahogarse en la orilla? podr preguntarse con razn el lector.
Lo que nos hace falta es un tipo que herede de T y que delegue la implementacin
de sus mtodos virtuales en los mtodos
correspondientes de A<T>. Esto lo podramos solucionar si podemos convertir un
objeto de tipo A<T> en T, que es precisamente lo que hace el mtodo TypeConvert
de nuestra clase Converters:
class MultipleInheritance
{
...
public static Type EmitGenericSubtype(
Type baseType, Type constrainType)
{...}
}
Conclusiones
Invitamos a los lectores de dotNetMana a disfrutar de la genericidad que
viene con Visual Studio 2005 y el .NET
Framework 2.0, a la vez que con ello
puedan potenciar su capacidad de desarrollo. Esperamos con este artculo haber
develado algunos secretos de lo que puede lograrse, otros trabajos deben estar
por venir.
Referencias
[1]
[2]
[3]
del Valle Mario, Katrib Miguel,El poder de la reflexin en .NET, dotNetmana No 3,Abril 2004, Ed
Netalia, Espaa M-3.075-2004
Realmente no conocemos ningn lenguaje que permita algo como esto y debemos reconocer que es C#2.0 quien ha llegado ms lejos en trminos de genericidad.
Aunque bien que pudiera implementarse permitir algo as ya que a fin de cuentas toda la informacin est disponible en tiempos de compilacin.
Suscrbase y llvese el
CD Volumen 1 GRATIS
AG
OT
AD
O
An est a tiempo
N 7
N8
N9
N13
N14
N15
N16
N10
N11
N12
N18
N19
AG
OT
AD
O
N6
N17
de
Puede enviar sus datos por Fax al 91 499 13 64, o por telfono al 91 666 74 77,
o por email a la direccin suscripciones@dotnetmania.com, o tambin puede
enviarlos por correo postal a la siguiente direccin:
de 2005
Netalia, S.L.
C/ Robledal, 135
28529- Rivas Vaciamadrid (Madrid)
dnm.inicio.fundamentos
dnm.lenguajes.vb
Visual Basic, (que a partir de esta versin deja de llamarse .NET para pasar a usar la versin de Visual
Studio), 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 desarrollo (o editor).
men Herramientas>Opciones>Proyectos y
Soluciones> Valores predeterminados de VB, tal como
se muestra en la figura 1.
Consideraciones previas
Antes de comentar las novedades propias del lenguaje y del entorno de desarrollo de Visual Basic 2005,
quisiramos indicar unas recomendaciones que cualquier desarrollador que quiera tomarse en serio la
escritura de cdigo con Visual Basic.
<< dnm.lenguajes.vb
Novedades en el lenguaje
Para poder ofrecer mayor funcionalidad, el propio lenguaje de Visual
Basic se ha visto mejorado con nuevas
instrucciones, de forma que no sea necesario acudir a la librera de clases de
.NET para poder disfrutar de nuevas
caractersticas. Para ser justos, debemos
decir que muchas de las novedades
incluidas en el propio lenguaje de Visual
Basic 2005 son caractersticas que ya
inclua su compaero de viaje C#; esto
lo pone a un nivel que antes no tena, y
por lo que ha sido muy criticado e incluso etiquetado como lenguaje de juguete. A partir de esta versin de Visual
Basic, si bien an no incluye todas las
caractersticas que muchos hemos solicitado, podemos afirmar que quin no
saque el mximo rendimiento a este lenguaje, no ser un problema propio del
lenguaje, sino una falta de visin de los
desarrolladores de versiones anteriores
que an no acaban de adaptarse.
Confiamos que este artculo motive a
aquellos que no se deciden a dar el salto final.
<Assembly: CLSCompliant(True)>
<<dotNetMana
49
<< dnm.lenguajes.vb
numricas de estos nuevos tipos de
datos, podemos usar los nuevos sufijos
numricos (o caracteres de tipos) que se
han aadido para dar soporte a estos
nuevos tipos. Estos sufijos empiezan con
la letra U y pueden ser: US para el tipo
UShort, UI para el tipo UInteger y UL para
el tipo ULong.
La forma de usarlo sera como se
muestra a continuacin:
Dim us1 As UShort = 3US
Dim ui1 As UInteger = 4UI
Dim ul1 As ULong = 5UL
Instruccin Continue
Esta instruccin nos permitir
continuar un bucle sin necesidad de
tener que alcanzar el cdigo que hace
que se repita. Y su utilidad est en que
nos evitar usar condiciones para que
en la repeticin del bucle no pase
por una parte del cdigo. Por ejemplo, si tenemos un bucle For y parte
del cdigo contenido en dicho bucle
no siempre debe ejecutarse, lo que
hasta ahora hacemos es algo como
esto:
For...
Cdigo que siempre se ejecuta
If <condicin> Then
Cdigo a ejecutar solo si se
cumple la condicin
End If
Next
[ ]
<<dotNetMana
NOTA
50
El operador IsNot
Con este operador las condiciones usadas para comprobar si un tipo por referencia no es de un tipo determinado resultarn ms fciles de escribir y consecuentemente el cdigo resultante ser ms legible. Hasta ahora si, por ejemplo, queramos comprobar si una variable no contena un valor nulo, lo hacamos as:
If Not variable Is Nothing Then ...
La instruccin Using
<< dnm.lenguajes.vb
versin podamos indicar un rango de
ndices de la forma <valor inferior> To
<valor superior>. Pero al igual que ocurra en VB6, tambin podemos declarar
arrays sin indicar ese rango de valores, el
problema es que al usar esa forma de
declarar, en la que slo se indica un valor,
es que dicho valor representa el ndice
superior del array, de forma que si tenemos esta declaracin:
Dim nombres(5) As String
<<dotNetMana
51
<< dnm.lenguajes.vb
<<dotNetMana
52
[ ]
NOTA
Cuando hacemos sobrecargas de operadores o conversiones en nuestros propios tipos, al menos uno de los parmetros o el tipo devuelto debe ser del mismo que el tipo en el que se declaran,esto
es para que no podamos definir operadores o conversiones de tipos de los que no
tengamos la declaracin.
Conversiones automticas
Como hemos comentado anteriormente, el compilador de Visual Basic ya
sabe cmo hacer ciertas conversiones
implcitas, por tanto, si le enseamos
cmo hacer una conversin del tipo Punto
a un entero de 32 bits, Visual Basic sabr
cmo convertir automticamente un
Punto a un entero de menor capacidad:
Dim s As Short = 12
Dim p5 As Punto = s
Console.WriteLine(valor de p5 = {0}, p5)
<< dnm.lenguajes.vb
[ ]
NOTA
<<dotNetMana
53
<< dnm.lenguajes.vb
' Sobrecarga de IsFalse y IsTrue
Public Shared Operator IsFalse(ByVal p1 As Punto) As Boolean
Return p1.X = 0 AndAlso p1.Y = 0
End Operator
Public Shared Operator IsTrue(ByVal p1 As Punto) As Boolean
Return p1.X <> 0 OrElse p1.Y <> 0
End Operator
Fuente 4. Sobrecarga de los operadores IsTrue y IsFalse, para usar nuestros tipos en comparaciones
[ ]
NOTA
Tipo
Operadores
Unario
Binario
<<dotNetMana
54
Novedades de .NET
Framework 2.0
Con total seguridad, las novedades que
ms llaman la atencin, no slo de Visual
Basic, sino tambin de C#, son las incorporadas en el propio .NET Framework.
Quin a estas alturas no ha odo
mencionar los tipos generics? Seguro que
todos los lectores. Y si, por esas casualidades de la vida, el que lee an no sabe
qu son los tipos generics, est de suerte, ya que en este mismo nmero y de
la mano de Mario del Valle y de
Miguel Katrib (ambos del grupo
WEBOO) han escrito un estupendo
artculo que trata en profundidad esta
nueva incorporacin de .NET
Framework 2.0, aunque desde el punto
de vista del desarrollador de C#, pero si
quiere saber cmo usar estos tipos de
datos en Visual Basic 2005, puede descargar gratuitamente el nmero 8 de
dotNetMana en el que tratamos los
generics desde la perspectiva del desarrollador de Visual Basic.
De los tipos generics hablaremos muy
poco, ya que, tal como hemos comentado, est ampliamente tratado en este
mismo nmero y en el nmero 8 de esta
revista, pero desde que se public el artculo para Visual Basic 2005 hasta ahora han pasado unos meses y el artculo
anterior se basaba en la versin beta 1,
y como se ha aadido nueva funcionalidad para los desarrolladores de Visual
Basic, trataremos esas novedades, aunque sea brevemente.
Pero primero veamos cmo podemos
usar los tipos generics, para que nos sirva
como recordatorio y tambin de paso para
comprender cmo utilizarlos en Visual
Basic, por tanto, veamos el cdigo fuente 5 en el que declaramos una coleccin
que slo acepte tipos de datos 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"
<< dnm.lenguajes.vb
Conclusiones
Realmente son muchas las novedades
que incorpora Visual Basic 2005, pero
lamentablemente es imposible explicarlas
todas en el espacio dedicado a un artculo. Afortunadamente en otros artculos de
este monogrfico sobre la nueva versin
de Visual Studio se han tratado otros temas
que de alguna forma tambin son vlidos
para Visual Basic, como son los distintos
niveles de accesibilidad para los bloques
Get y Set de las propiedades o las clases
parciales que se ha tratado en el artculo
de las novedades de C#, o las novedades
En el cdigo de este artculo se incluyen ejemplos de algunas de las novedades que no hemos tenido oportunidad de tratar.
<<dotNetMana
NOTA
55
dnm.lenguajes.vb
Jorge Serrano
Maestro qu?
Jorge Serrano
es redactor de dotNetMana. Es
Ingeniero Informtico y MVP de
VB y de .NET. Es Webmaster de
PortalVB.com y autor de
diferentes libros y artculos
tcnicos. Jorge est entre los
mejores profesores y
conferenciantes sobre la
tecnologa .NET de nuestro pas.
<< dnm.lenguajes.vb
Estas dos tablas, estarn relacionadas como por ejemplo, como se muestra en la figura 3.
Nuestra tarea ahora, ser la de preparar las tablas del origen de datos con
el objetivo principal, de que stas se
comporten como datos de tipo maestro-detalle.
<<dotNetMana
Lo nico que tenemos que hacer ahora, es aadir algunas filas de datos a nuestras tablas, y as, estaremos ya listos de preparar nuestra aplicacin maestro-detalle
con Visual Basic 2005 Express Edition.
57
<< dnm.lenguajes.vb
<<dotNetMana
58
Si observamos el entorno de desarrollo, veremos que no slo se han insertado los campos de la tabla tbl_FAMILIAS, sino que adems, se han aadido
varios componentes y controles a nuestra aplicacin. Lgicamente, podemos
personalizar y manipular los controles
y componentes insertados en el formulario, pero ahora mismo, lo que nos interesa una vez insertada la tabla maestra,
es insertar la tabla detalles.
Para ello, arrastraremos y soltaremos ahora, la tabla tbl_PRODUCTOS al formulario de nuestra aplicacin. De esta
manera, aparecer en nuestro formulario un control DataGrid que corresponde con los datos de detalle de nuestra
aplicacin tal y como se muestra en la
figura 14.
<< dnm.lenguajes.vb
DataSource y dentro de la lista desplega-
Si observamos el cdigo
generado por el asistente,
veremos que se trata de un
cdigo bastante limpio
Lo que Visual Basic 2005 Express
Edition genera en todo esto, es un DataSet
tipado con el cul podremos trabajar en
nuestra aplicacin maestro-detalle. En
nuestro ejemplo, este DataSet tipado lo
encontraremos en la ventana del explorador de soluciones con el nombre PRUEBAS_maestro_detalle.xsd.
De todos los modos, si ejecutamos
nuestra aplicacin ([F5]), observaremos
que los datos maestro-detalle no estn an
relacionados entre s como se muestra en
la figura 15. Qu es lo que falta?
el control de navegacin de
datos BindingNavigator
contiene diferentes opciones
que nos permitirn aadir,
modificar y actualizar, borrar
y guardar datos
<<dotNetMana
Conclusiones
59
dnm.plataforma.net
Figura 1
<< dnm.plataforma.net
Figura 3
Figura 5
<<dotNetMana
Figura 2
61
<< dnm.plataforma.net
ciones, pero adems, contamos con la posibilidad de
crear nuestros propios recortes personalizados mediante el administrador de snippets.
Para agregar un code snippet hemos de hacer clic
derecho sobre el editor y elegir la opcin Insert
Snippet, que abrir una lista de carpetas conteniendo todos los diferentes bloques de cdigo organizados por categoras, como vemos en la figura 8.
Figura 6
Figura 7
Existen ciertas operaciones cuyo cdigo normalmente repetimos hasta la saciedad en todas nuestras
sesiones de trabajo. Para ahorrar tiempo en la escritura de dicho cdigo, ahora disponemos de los Code
Snippets (Recortes de Cdigo), que consisten en bloques
de cdigo prefabricados, almacenados en VS2005,
y que pegamos directamente sobre el editor, ahorrando
gran cantidad de tiempo de escritura.
Figura 9
<<dotNetMana
62
<< dnm.plataforma.net
Figura 11
Figura 12
Cerrando el IDE
Y esta ha sido la relacin de primicias ms remarcables con las que desembarca el nuevo y flamante
Visual Studio 2005. Como hemos comentado al
comienzo de este artculo, hay muchas ms, entre
las que podramos mencionar de forma breve, la
capacidad de la ventana Inmediato para evaluar
expresiones en tiempo de diseo; la nueva ventana
Error List, que muestra los errores producidos,
por lo que ya no se usa la ventana Task List para
este menester; los atributos del depurador, que permiten personalizar el modo en el que el depurador
visualiza la informacin; el nuevo sistema de ayuda, con capacidades mejoradas de bsqueda, almacenamiento para entradas favoritas de la documentacin, etc.
En definitiva, una nueva versin de un gran
entorno de desarrollo de aplicaciones, que potencia nuestra capacidad de trabajo al tiempo que la
simplifica.
<<dotNetMana
Figura 10
63
dnm.plataforma.net
Carlos Quintero
Novedades en la extensibilidad de
Visual Studio 2005
Como no poda ser menos,Visual Studio 2005 introduce muchas mejoras en su modelo de extensibilidad que permiten crear complementos de forma mucho ms sencilla,
sin las complicaciones innecesarias de antao.
<< Es evidente que Microsoft ha escuchado a los desarrolladores de complementos (add-ins) que hemos estado quejndonos durante los ltimos tres aos de
las complicaciones, a nuestro juicio innecesarias,
que tenan los complementos de Visual Studio
.NET 2002/2003 y, por fin, en esta nueva versin
de Visual Studio la creacin de complementos se
ha simplificado notablemente y se han introducido
interesantes mejoras. Estas complicaciones eran
consecuencia de la tecnologa COM (ActiveX) que
hereda el IDE de Visual Studio actual de sus versiones 5.0 y 6.0 de finales de los 90 (recordemos
que Visual Studio 2005 sigue sin ser una aplicacin
.NET). No slo eso, sino que los bugs ms indeseables del modelo de extensibilidad han sido corregidos. Para los lectores que no lo sepan, el nuevo
sitio Web MSDN Product Feedback Center
(http://lab.msdn.microsoft.com/productfeedback) permite enviar sugerencias y bugs a los equipos de desarrollo de los productos de Microsoft (no a todos
todava), y funciona realmente bien, con respuestas rpidas (al menos durante las fases beta de los
productos).
Lo primero que llama la atencin del proyecto generado por el asistente para la creacin de complementos (men Nuevo proyecto, nodo Otros tipos de
proyectos, Extensibilidad) es que algunas de las referencias han cambiado de nombre y de versin:
El ensamblado EnvDTE.dll, que contiene la mayor
parte del modelo de extensibilidad de Visual Studio
ahora tiene la versin 8.0.0.0, aunque contiene
<< dnm.plataforma.net
se pueden seguir usando las formas
anteriores de registrar un
complemento, pero la nueva forma
de registro es mucho ms fcil
Nuevo registro de complementos
Entre los archivos generados por el asistente, hay
otro que llamar nuestra atencin: el que tiene la extensin .addin. Como explicamos en el nmero 18 de
dotNetMana, los complementos de Visual Studio .NET
2002 o 2003 tenan que ser registrados de dos maneras:
Como componente ActiveX, usando COM Interop
(regasm.exe o equivalente): por fin, este paso ya no
es necesario, y es que no tena mucho sentido que,
siendo un ensamblado .NET, hubiera que registrar
la DLL del complemento como componente ActiveX
para que Visual Studio la pudiera encontrar y cargar.
Como complemento de Visual Studio, para que aparezca en el Administrador de Complementos: esto se
haca aadiendo unas entradas en el registro de
Windows (HKEY_CURRENT_USER\Software\Microsoft\
VisualStudio\7.1\AddIns para Visual Studio .NET
2003) pero ahora se puede hacer a travs de un archivo XML con extensin .addin ubicado en unas carpetas determinadas. Visual Studio 2005 busca archivos con la extensin .addin en las carpetas que aparecen en el dilogo que se muestra pulsado el men
Herramientas, Opciones, nodo Seguridad de
complementos/macros. La figura 1 muestra dicho
dilogo (tomado de la versin inglesa de Visual Studio
2005). Como podemos observar, hay varias carpetas
donde Visual Studio 2005 buscar los archivos con
la extensin .addin. Unas carpetas son especficas
para el usuario de la sesin de Windows (las que
comienzan por %USERPROFILE% o %VSAPPDATA%), por lo
que un archivo .addin en dicha carpeta har que el
complemento slo est disponible para ese usuario,
Fuente 1
Figura 1
<<dotNetMana
65
<< dnm.plataforma.net
el Examinador de Objetos, veremos que
tiene muchas clases y mtodos que terminan en 2, para diferenciarlos de los
del ensamblado anterior EnvDTE.dll. La
clase ms importante es EnvDTE80.DTE2, y
es que ahora el parmetro application del
mtodo OnConnection del complemento,
del tipo Object, se puede convertir al tipo
EnvDTE80.DTE2 que tiene los mismos mtodos y propiedades del antiguo EnvDTE.DTE,
y otros nuevos que se han aadido en esta
versin. Algunos mtodos han cambiado
de firma (signature), en especial los relacionados con botones y barras de botones. Por ejemplo, la propiedad DTE2.
CommandBars ya no devuelve un objeto del
tipo Microsoft.Office.Core.CommandBars
como ocurra antes, ni siquiera del tipo
Microsoft.VisualStudio.CommandBars.Com
mandBars del nuevo ensamblado para las
objWindow2 As Window2
colCommandBars As CommandBars
objCommandBar As CommandBar
objCommand As Command = Nothing
<<dotNetMana
66
Fuente 2 (Continua...)
<< dnm.plataforma.net
End Try
Try
' Si el comando del add-in no est creado, lo crea
If 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 soluciones
objWindow2 = CType(m_objDTE2.Windows.Item(EnvDTE.Constants.vsWindowKindSolutionExplorer), Window2)
' Obtiene su barra de comandos
colCommandBars = DirectCast(objWindow2.CommandBars, CommandBars)
objCommandBar = colCommandBars.Item("Explorer")
m_objCommandBarControl = CType(objCommand.AddControl(objCommandBar), CommandBarControl)
Catch ex As Exception
System.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
Try
If Not (m_objCommandBarControl Is Nothing) Then
m_objCommandBarControl.Delete()
End If
Catch ex As Exception
MessageBox.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
Try
If CmdName = m_objAddIn.ProgID & "." & m_NOMBRE_COMANDO Then
StatusOption = vsCommandStatus.vsCommandStatusSupported Or vsCommandStatus.vsCommandStatusEnabled
End If
Catch ex As Exception
MessageBox.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
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub
(...continuacin ) Fuente 2
<<dotNetMana
Try
If CmdName = m_objAddIn.ProgID & "." & m_NOMBRE_COMANDO Then
MessageBox.Show(CmdName & " ejecutado.")
End If
67
<< dnm.plataforma.net
Tambin se ha eliminado la necesidad de tener que usar Visual C++ para
crear la DLL satlite que proporciona
los bitmaps para los comandos de nuestro complemento. Aunque sigue siendo
necesaria una DLL satlite (parece que
no, Microsoft no ha escuchado an la
sugerencia de eliminarla o hacerla
opcional), ahora se puede usar una DLL
manejada (no nativa Win32) creada
usando Visual Basic .NET o C# a la que
aadiremos nuestros recursos de tipo
bitmap.
<<dotNetMana
68
Bibliografa
[1]
library/xc52cke4(en-us,vs.80).aspx
colWindows2 As Windows2
objWindow As Window
objUserControl As Object
objAssembly As System.Reflection.Assembly
Fuente 4
Este artculo se ha escrito usando la versin Visual Studio 2005 Community Technology Preview (CTP) de Junio de 2005, que es posterior a la Beta 2. Es posible que algunas
cosas explicadas en el artculo, as como la documentacin, varen en la versin final.
dnm.laboratorio.net
desarrollados de versiones anteriores o bien utilizbamos de componentes de otro tipo (por ejemplo, el
acceso a Pocket Outlook Object Model), nos veamos obligados a crear una librera de llamada puente o wrapper como se conoce en ingls, que interactuara con
los componentes COM para la llamada desde cdigo
administrado. Pues bien, COM Interop es una de las
novedades de .NET CF 2.0, aunque no estar tan
extendida como en .NET Framework y entre otras
mejoras se han extendido los Type Marshaling, con
nuevos tipos y tipos embebidos.
De la misma forma, el simple acceso al registro
del sistema o a los puertos COM derivaban en una
llamada P/Invoke a la API, ahora, .NET CF 2.0 provee la clase RegistryKey para el acceso al registro, y
puede utilizar las clases de .NET Framework para el
acceso a los puertos serie.
La seriacin es tambin una de las gratas novedades, as como el pleno soporte a las nuevas caractersticas de Microsoft SQL Server 2005 Mobile Edition e
incluso a la seguridad, transaccionalidad y eficacia de
los servicios de mensajera MSQS (Message Queuing).
A nivel de seguridad, tambin remarcar el soporte a la
criptografa y a los certificados X509, la relacin entre
ensamblados a travs del atributo Friend Assembly y
soporte a la autenticacin NTLM e IPv6, la prxima
generacin de protocolos para Internet.
Para las aplicaciones desarrolladas con .NET CF
1.x, podremos ejecutarlas en dispositivos con .NET
CF 2.0 configurndolo de manera explcita, sin necesidad de modificar cdigo. Para migrar las aplicaciones de .NET CF 1.x a .NET CF 2.0, Visual Studio
2005 ofrece una Upgrader, que permite migrar automticamente mediante un asistente.
<< dnm.laboratorio.net
Visual Studio 2005
<<dotNetMana
71
<< dnm.laboratorio.net
Clase
Descripcin
hasta cuatro.
Los nuevos emulaMuestra y gestiona documentos o archivos.
DocumentList
dores podrn comparClase especfica de Pocket PC, para la utilizacin de botones de hardtir carpetas. Hasta ahoHardwareButton
ware de dichos dispositivos.
ra el intercambio de
Permite el acceso a todos los tipos de acceso disponibles del dispoficheros se realizaba
InputMethodCollection sitivos (InputPanel, Keyboard)
desde el ordenador
Clase especfica de SmartPhone,para tipo de acceso AlphaABC,T9,etc.
InputMode
escritorio compartienProporciona efectos de texto.
LogFont
do una carpeta y desde
Permite manejar el evento Hibernar.
Mobile Device
el emulador obtenaA partir de Windows Mobile 2003 SE, esta clase permitir la orienmos los ficheros; en
ScreenOrientation
tacin de la pantalla en grados (90-180-270).
esta versin, la comTabla 1. Nuevas clases en Microsoft.WindowsCE.Forms particin de carpetas y
ficheros es bidireccio.NET CF pueda destruir el formulario
nal. Como coment anteriormente, con
principal cuando ste se cierre. Soporte
la introduccin de Windows Mobile 5.0,
para DirectX y Direct3D (aunque slo
la resolucin de los dispositivos podr
estar disponible para versiones posteriocambiar y, por tanto, los emuladores
res de Windows Mobile). Se han aadiharn lo mismo; podremos configurar
do caractersticas especficas para las platanto la resolucin como la orientacin
taformas Pocket PC y Smartphone, en
de la pantalla.
cuanto a controles se refiere (ver tabla 1
Visual Studio 2005 y Windows
y figura 3).
Mobile 5.0 SDK suministrarn 15 emuladores distintos, por lo
que adems se incorporar una nueva herramienta de administracin
de emuladores conocida
como Device Emulator
Manager (DEM). Adems DEM es una pieza
fundamental para la
comunicacin entre
ActiveSync y los emuladores ya que en ella recaeFigura 4. La creacin de nuevos controles se ha orientado a las
r la responsabilidad de
necesidades reales y especficas de cada plataforma.
conexin y desconexin
entre ambos.
Debido al la multi-resolucin que ofrecer Windows Mobile 5.0, y adems de las
Visual Studio 2005 + Windows
propiedades anchoring y docking, comentaMobile 2005 + SQL Mobile
das anteriormente, los formularios sern
2005 = Un nuevo escenario
Auto-Scrollables. Adems tendremos acceso al portapapeles del sistema y a eventos
del teclado de los dispositivos.
.NET Compact Framework sigue
creciendo y amplindose. Cada vez son
ms los controles y clases que resuelven
Emuladores
o facilitan las tareas de su versin anteVisual Studio2005, ofrece una mayor
rior, y eso es de agradecer. Pero el autncantidad de emuladores con unas caractico potencial de .NET CF 2.0 est ligatersticas mejoradas y nuevas. Los emulado tanto a SQL Mobile 2005 como a
dores ofrecern soporte para ActiveSync,
Windows Mobile 2005. .NET CF 2.0,
con lo que ser posible conectarlos al escribajo sistemas operativos Windows
torio y sincronizndolos como si de un
Mobile 2005, adems de todo lo mendispositivo fsico se tratara, la cual cosa
cionado (incluyendo el soporte para
facilitar las aplicaciones RAPI. Asimismo
DirectX y Direct3D), contendr librela cantidad de puertos COM aumentar
ras para el acceso a Pocket Outlook
<<dotNetMana
Notification
72
dnm.ado.net
Pepe Hevia
ADO.NET 2.0
Ms y mejor acceso a datos
Ya est a la nueva versin de .NET Framework.Y no es una simple mejora de
la anterior, sino que evoluciona de nuevo aadiendo ms y mejores herramientas
a la par que optimiza las ya existentes.Y es que se ve que ocurre una interaccin perfecta entre comunidad de desarrolladores y Microsoft que nunca antes
se haba visto.
correcciones propuestas y realizadas; y muchas novedades deseadas, e implementadas para dar soporte al futuro de los productos de Microsoft desarrollados sobre esta
plataforma. El resultado, un Framework ms estable si
cabe, robusto que ya lo era mucho y potente ms
clases que nunca que el anterior.
Sincronizando la salida del Framework 2.0 con uno
de los servidores .NET ms esperado Yukon o SQL
Server 2005 vienen de serie con las BCL del sistema:
las nuevas clases de acceso a datos, ya conocidas como
ADO.NET 2.0. Ampliando lo que comentaba en el
prrafo anterior, ADO.NET 2.0 incluye numerosas
mejoras de las clases que ya conocemos del Framework
1.1; pero que tambin nos regala numerosas novedades
que harn las delicias de los ms fanticos. Eso unido a
cambios estructurales que no nos haban cuajado de la
versin anterior, cierran un crculo que perfecciona an
ms esta tecnologa de acceso a datos de Microsoft.
Se amplan an ms las mximas de Sencillez, productividad e integracin. Con esto se quiere decir que
las mejoras no se reducen a clases nuevas, sino a ampliaciones de las existentes. Y se reduce an ms el cdigo
Pepe Hevia
colabora habitualmente con
dotNetMana. Es arquitecto de
software senior en AlhambraEidos.Tiene las certificaciones de
MCAD, MCSD.NET y MCT en
.NET Framework. Ha escrito
varios libros sobre la plataforma
.NET (lalibreriadigital.com)
NOTA
ADO.NET 2.0 lejos de mantener el status quo,ha mejorado sus herramientas a la
par que ofrece multitud de novedades que
simplificarn el desarrollo de los sistemas
de n-capas.Y, como no, proporciona unas
clases que aprovechan al mximo la potencia del nuevo SQL Server 2005
<< dnm.ado.net
<<dotNetMana
NOTA
75
<< dnm.ado.net
DbProvidersFactory podremos des-
CreateConnection
CreateCommand
CreateCommandBuilder
CreateConnectionStringBuilder
CreateDataSourceEnumerator
CreateParameter
CreatePermission
Fuente 2. Las factoras de clases permiten la carga dinmica de proveedores .NET a partir de la
cadena de conexin.
<<dotNetMana
Enumeracin de servidores
CreateDataAdapter
<appSettings>
<add key="DbProvider" value="System.Data.SqlClient"/>
<add key="ConnectionString"
value="Server=localhost;Database=Northwind;
Integrated Security=true;"/>
</appSettings>
</configuration>
76
CreateConnection
DataTable t = conexion.GetSchema("Tables");
t.WriteXml("tables.xml");
<< dnm.ado.net
genera sentencias SQL DML a partir de una instruccin
SELECT. Otra utilidad es la de parsear una cadena de conexin, y permitir al desarrollador tratar cada elemento de
forma individual. Lo dicho, una utilidad que a ms de
uno le vendr bien.
NOTA
Las utilidades de los proveedores .NET
se han ampliado para acoger las mejoras de
los estndares ANSI SQL como, por ejemplo, la recuperacin de Metadatos.
ra de trabajar, de forma que podamos trazar y depurar cualquier mnimo problema que se presente con
la informacin adecuada para poder actuar en consecuencia. Todo un esfuerzo por parte de los desarrolladores de esta tecnologa.
<<dotNetMana
Trazabilidad
77
<< dnm.ado.net
<<dotNetMana
MARS
78
Transacciones
No es que hayan cambiado mucho las cosas en este
sentido, pero lo que s se ha hecho es integrar en el
cliente las funcionalidades del nuevo espacio de nombres System.Transactions por el cual se pueden obtener transacciones promocionadas. Esto va de hacer
posible que se puedan tener varias conexiones a varias
instancias de SQL Server y conseguir que se activen
de forma automtica las transacciones distribuidas
en el caso de participar del mismo objeto Transaction.
Eso es toda una ventaja sobre todo en aplicaciones de
servidor o de grandes sistemas de informacin escalables donde la informacin puede estar distribuida
en mltiples servidores.
<< dnm.ado.net
ejemplo, un cambio de datos en una fila empleando para ello los omnipresentes delegados. Imaginaos
la utilidad de esta clase en entornos Web a la hora
de combinarlo con el objeto Cache o en entornos de
clientes desconectados de cualquier tipo de cliente
.NET. Las posibilidades son muy interesantes, con
el mnimo esfuerzo. Pero cuidado, que os veo, que
esto normalmente conllevar a recargar determinadas partes del DataSet pero no abusis de ello
en entornos de alta transaccionalidad y multitud de
filas. Antes que nada, echadle cabeza
SqlCommand comando =
new SqlCommand("SELECT au_id, au_lname FROM dbo.authors", conexion);
// Registrar el delegado de dependencia
SqlDependency 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);
}
Otra forma de hacer las cosas, que ya comentaremos con ms detalle en otros artculos, lo proporcionan las nuevas colas de SQL Server 2005. A
travs de conexiones a colas de eventos mediante subscripciones SQL y empleando la clase
SqlNotificationRequest podremos tanto capturar
eventos como reaccionar en consecuencia empleando prototipos de comunicaciones asncronas.
Todo un mundo
<<dotNetMana
79
<< dnm.ado.net
pio DataSet, que poda llegar a manejar volmenes
de informacin considerables.
NOTA
Casi todas las mejoras de los objetos desconectados son transparentes al programador. Pero un DataTable Stand-Alone y un
formato binario nuevo de seriacin har las
delicias de los ms "friquis".
<<dotNetMana
80
dnm.arquitectura
nolgicos disear soluciones orientadas a servicios que pueden ser validadas contra sus propios entornos operacionales.
Visual Studio Edicin para Desarrolladores de
Software. Fundamentalmente incorpora herramientas de desarrollo avanzadas que permiten a los equipos aumentar su productividad
e introducir un alto nivel de calidad desde el
principio y durante todo el ciclo de vida de la
aplicacin.
Visual Studio Edicin para Testeadores de
Software. Herramientas avanzadas de pruebas de carga que permiten a los equipos verificar el rendimiento de aplicaciones antes del
despliegue.
Visual Studio Team Foundation Server. Herramientas de colaboracin de equipos basadas en
servidor que permiten a las organizaciones gestionar y seguir el progreso y estado de los proyectos con menos esfuerzo.
<<dotNetMana
Gestin de proyectos
81
<< dnm.arquitectura
ga aplicada al proyecto pueden variar los tipos de
work items. Por ejemplo, en MSF Agile se definen
cinco tipos diferentes que son: escenarios, requisitos de calidad de servicio, tareas, bugs y riesgos.
VSTS 2005 provee la conversin de datos desde
otros sistemas de tracking incluyendo Rational
ClearQuest, Bugzilla y PVCS.
<<dotNetMana
82
Anlisis y Diseo
En las fases de anlisis y diseo, Team System
incorpora diseadores de sistemas distribuidos para
reducir la complejidad del desarrollo y despliegue de
aplicaciones orientadas a servicios. El conjunto esta
compuesto por:
Application Connection Designer. Permite a los
arquitectos y desarrolladores definir aplicaciones que sern configuradas en sistemas de despliegue.
Logical Datacenter Designer. Ser utilizado para
crear diagramas que representen la estructura
lgica del centro de datos con objeto de comunicar informacin relevante para el desarrollador acerca del entorno de despliegue.
System Designer. Asistir en la composicin de
aplicaciones dentro de cada sistema final.
Deployment Designer. Enlazar las aplicaciones dentro del sistema lgico de servidores modelado sobre
un diagrama de centro de datos lgico.
Estos diseadores facilitan el diseo a los arquitectos de aplicaciones orientadas a servicios mientras
que los desarrolladores pueden trabajar con el cdigo generado manteniendo los cambios del cdigo sincronizados con el diseo visual.
<< dnm.arquitectura
Herramientas de desarrollo
avanzadas
Las herramientas de anlisis esttico de cdigo que acompaan a Visual
Studio 2005 permiten detectar defectos en el cdigo inspeccionando el
cdigo fuente o los binarios sin necesidad de ejecutarlos. PREFast o FxCop
son herramientas de este estilo. Estas
herramientas se integran con el proceso de compilacin produciendo advertencias o errores en la lista de errores
de Visual Studio y facilitando la navegacin hasta el defecto con un solo clic.
<<dotNetMana
83
<< dnm.arquitectura
Aunque las herramientas ya disponen
de reglas para el anlisis esttico, es
posible agregar nuevas reglas a travs
de las extensiones.
Application Verifier es una herramienta de Visual Studio que expone instrumentacin ya presente en el sistema
operativo Windows. La instrumentacin
realiza verificaciones en los programas en
ejecucin dentro de reas seleccionadas
como consumo de memoria, utilizacin
de secciones crticas o modo de utilizacin. Permite detectar problemas de solapamiento de memoria, bloques alojados
en el heap, reutilizacin despus de borrado, doble borrado y contaminacin del
heap. En el rea de secciones crticas detecta operaciones que pueden conducir a
deadlocks o prdida de recursos. En la parte de modo de utilizacin detecta intentos de reutilizacin de manejadores que
ya no son vlidos.
Code profiler es un mecanismo de
Visual Studio Team System que peridicamente interrumpe la ejecucin de
una aplicacin para determinar qu funcin se est ejecutando. Mantiene un
conteo para cada funcin que es mostrado sobre una estadstica una vez finalizada la ejecucin del profiler para determinar el rendimiento medio de cada
funcin analizada. Sin embargo, esta
funcionalidad no estar disponible para
aplicaciones 64 bits hasta siguientes versiones de Team System.
<<dotNetMana
Herramientas de testeo
84
dnm.todotnet.qa
Dino Esposito
<< Vamos a comenzar este recorrido por Visual Studio con una
especie de pregunta existencial:
Tengo una pregunta existencial: Hay vida ms all
de los asistentes en Visual Studio 2005? Si los utilizo,
podr seguir escribiendo cdigo manualmente? Es
arrastrar-y-soltar el futuro de la programacin?
La mayora de las cosas que conozco hoy se remontan a hace quince aos, cuando la nica forma de programar aplicaciones Windows era utilizando el SDK. Se
trataba de un API al estilo C, expuesto por el sistema
operativo. Trabajar con el SDK de Windows, te da ese
sentido especial de los sistemas de ventanas, te pone en
contacto con la maquinaria de bajo nivel, y al final, es
difcil, y a menudo, frustrante. Por esa razn se inventaron primero, Visual Basic, y despus, los asistentes.
Empec a jugar con los asistentes en Visual Studio
4.0. En ese momento, un asistente era simplemente
una librera de MFC, que deba registrarse e integrarse con el IDE de Visual Studio. El asistente creaba un
proyecto con un nmero predeterminado de ficheros
para formar una aplicacin con un conjunto de capacidades definidas por el usuario. Estaba dirigiendo un
Dino Esposito
es redactor de dotNetMana.
Formador, consultor y escritor
afincado en Roma. Miembro
del equipo de Wintellect,
Dino est especializado en
ASP.NET y ADO.NET. Puede
enviarle sus consultas a
TodotNet.QA@dotnetmania.com
Visual Studio 2005, trae buenas noticias a los programadores. Lo primero y ms importante, IIS ya no
es un requisito estricto. De hecho, el producto incorpora un servidor Web local que hace que IIS sea opcional, al menos para testeo rpido y depuracin. El servidor Web local es una versin ligeramente mejorada
de Cassini, una herramienta que se lanz originalmente con WebMatrix. Es importante tener en cuenta que
el servidor local representa solamente la opcin predeterminada. Si abres un proyecto a partir de un directorio virtual de IIS, Visual Studio utilizar IIS para
depurar la aplicacin.
El servidor Web embebido es solamente un pequeo archivo de cdigo ejecutable, y no puede reemplazar las caractersticas de un servidor completo como
IIS. Funciona slo con pginas individuales, y no inclu-
Qu es un DiffGram? Es la
representacin XML del estado de un
DataSet, incluyendo filas actuales,
cambios realizados, y errores
pendientes en filas de la tabla.
<<dotNetMana
TodotNet.qa@dotnetmania.com TodotNet.qa@dotnetmania.com
<< dnm.todotnet.qa
87
88
TodotNet.qa@dotnetmania.com TodotNet.qa@dotnetmania.com
<<dotNetMana
<< dnm.todotnet.qa
distribuir aplicaciones Web en un formato listo para usarse, preservando as la propiedad intelectual, y evitando,
adems, ese pequeo retraso inicial en las peticiones,
debido a la compilacin dinmica de recursos.
Por ltimo, pero no menos importante, Visual Studio
2005 soporta la edicin de ficheros individuales, y no
requiere de un proyecto para la edicin simple de un
fichero en disco. De modo que, si hacemos doble-clic
en un fichero .ASPX en el explorador de Windows, se
lanza Visual Studio 2005, permitiendo la edicin independiente. A diferencia la versin precedente, IntelliSense
y el coloreado del cdigo fuente funciona correctamente. La pgina puede verse, adems, directamente en el
navegador Web a travs del servidor Web local.
He estado investigando ltimamente con Visual
Studio 2005. Y tengo razones a favor y en contra del
paradigma de correspondencia 1 a 1 entre los ficheros
en disco y los nodos del Explorador de Soluciones. La
razn por la que no me gusta, es que si tengo directorios con montones de ficheros (por ejemplo, ficheros
grficos) las operaciones de copiar y pegar son muy lentas, por no mencionar las operaciones tipo chek-in y checkout con Visual SourceSafe. Sugerencias?
Parece que esta es una de las preguntas ms frecuentes a las que Scott Guthrie el Manager de proyecto de
ASP.NET ya respondi pblicamente en su sitio Web
http://weblogs.asp.net/scottgu. Es importante tener en cuenta que Visual Studio no muestra todos los ficheros y carpetas en el Explorador de Soluciones, sino que se omi-
ten ciertos archivos y carpetas ocultos, y lo mismo sucede con las carpetas virtuales de IIS. De forma que, para
ocultar un directorio demasiado grande de la vista del
explorador, basta con marcar la carpeta como un directorio virtual de IIS. Nada cambia en la aplicacin, pero
se obtienen una serie de beneficios asociados. Por ejemplo, puedes reutilizar tus imgenes ms fcilmente (o
cualquier otro recurso), en otras aplicaciones y almacenarlos en cualquier parte del servidor Web. El contenido de un directorio virtual, es automticamente excluido de cualquier operacin de distribucin y el cdigo
fuente tampoco se incluye en el control de cdigo del
proyecto.
A menudo tengo la necesidad de mover proyectos entre mquinas distintas. Existe finalmente una
forma de transportar la configuracin del IDE de forma fcil y cmoda?
Supongo que eres un tpico adicto al trabajo (como
yo) y no puedes estar en casa unas pocas horas por la
noche sin hacer algo. De ah la necesidad de transvasar la configuracin del IDE de la mquina del trabajo al PC de casa. Estoy en lo cierto? Francamente,
espero que no.
<< dnm.biblioteca.net
dnm.biblioteca.net
<<dotNetMana
<<
El lenguaje C# sigue acumulando interesantes cambios estructurales y semnticos para mantenerse como lingua franca y referente de las novedades en lenguajes de desarrollo, como
nos deca el mes pasado Jeff Prosise. Jesse Liberty, que ya nos haba convencido con sus
obras anteriores, y especialmente, con su Programming C#, aborda en esta pequea obra
justamente lo que necesita el desarrollador de C# que quiere actualizar sus conocimientos
a la nueva versin.
89
<< dnm.desvan
noticias.noticias
Marino Posadas
Microsoft y la seguridad
Anti-spyware en Windows Vista y otras novedades
Segn Greg Sullivan, Lead Windows Product Manager
en Microsoft (del que publicaremos una entrevista en
breve), el software de anti-spyware que ahora est siendo distribuido gratuitamente para versiones anteriores
de Windows, formar parte de Windows Vista, en un
esfuerzo por suministrar mejores servicios bsicos de
seguridad para los usuarios no corporativos. La noticia
se inscribe dentro de la poltica iniciada por la compaa acerca de la importancia de la seguridad, y coincide
casi en el tiempo con el anuncio de un nuevo software,
Microsoft Client Protection, cuya disponibilidad en
beta parece prxima. Dentro de esta lnea estara la presencia de Windows OneCare Live, un sistema antivirus y anti-spyware que parece uno de las consecuencias
<<
<<dotNetMana
Sitios recomendados
90
WWWCoder: Interesante sitio con artculos y cdigo fuente sobre desarrollo en .NET
de cara a la programacin Web y cliente/servidor. Actualiza con bastante frecuencia.
Disponible en http://www.wwwcoder.com/main/
Default.aspx