cerrar-sesion editar-perfil marker video calendario monitor periodico fax rss twitter facebook google-plus linkedin alarma circulo-derecha abajo derecha izquierda mover-vertical candado usuario email lupa exito mapa email2 telefono etiqueta

400440403. Dentro de Visual Studio 2008

Escrito por Redacción en Tema de portada
no hay comentarios Haz tu comentario
Imagen de logotipo de facebook Imagen de logotipo de Twitter Imagen de Logotipo de Google+ Imagen de logotipo de Linkedin

Desde el lanzamiento de la Plataforma 1.0 de .NET, Microsoft se ha venido comprometiendo con un entorno de programación hecho a medida con cada versión nueva de su plataforma gestionada. Pero por una serie de razones, esa tradición se vio interrumpida el año pasado cuando la Plataforma 3.0 de .NET hizo su debut sin una versión nueva de Visual Studio. Sin embargo este año, .NET 3.5 sale con un nuevo entorno de programación – Visual Studio 2008.

Visual Studio está diseñado como un entorno de contenedores que integra la funcionalidad de múltiples diseñadores visuales para prácticamente cualquier tipo soportado de aplicación y componente. Eso significa que tenemos plantillas ya listas para una variedad de tipos de aplicación de Windows y de web, incluido Windows Forms, Windows Presentation Foundation (WPF), sitios ASP.NET, y sitios web.


Además, Visual Studio 2008 ofrece diseñadores ad hoc para crear flujos de trabajo y servicios de Windows Communication Foundation (WCF). Las características de cada componente de salida son gestionadas mediante objetos, y a su vez agrupados en contenedores de solución.

El auténtico valor añadido de Visual Studio – y quizá la primera razón para considerar la opción de una actualización- es el impulso que da a la productividad del desarrollador. Docenas de asistentes, ventanas que aparecen de forma inteligente y sensibles al contexto, depuradores eficaces, y diseñadores visuales son algunos ejemplos de los servicios que puede que no hagan que un código sea más inteligente de forma automática, pero nos ayudan a centrarnos en puntos clave – pasar de un plumazo sobre trabajos, tareas repetitivas y procedimientos excesivamente rigurosos.

Proyectos con objetivos múltiples

¿Ha notado alguien que los lanzamientos anteriores de Visual Studio sólo soportaban una versión de la Plataforma .NET? Durante años, mi escritorio estaba lleno de atajos para diferentes versiones de Visual Studio basados en los proyectos que tenía entre manos en esos momentos: Visual Studio 2002 para las aplicaciones 1.0 de la Plataforma .NET, Visual Studio 2003 para la Plataforma .NET 1.1, y Visual Studio 2005 para las aplicaciones 2.0 de la Plataforma .NET. Por fin, Visual Studio 2008 introduce una característica muy interesante llamada “multitargeting” que nos permite crear aplicaciones para versiones específicas de la Plataforma .NET.

((Visual Studio está diseñado como un entorno de contenedores que integra la funcionalidad de múltiples diseñadores visuales))

Multitargeting pone dos ventajas fundamentales sobre la mesa:
– Ya no necesitamos instalar dos o más versiones diferentes de Visual Studio para gestionar los distintos clientes y proyectos.
– Ya no somos invitados de forma subliminal a actualizar a la siguiente versión mucho más chula de .NET debido a las nuevas características súper-chulas y que ahorran tiempo del próximo Visual Studio. Se podría decir que una IDE encaja en todas las Plataformas .NET. ¿Todas las plataformas? Bueno, no exactamente.

Multitargeting en Visual Studio 2008 empieza con .NET 2.0 (Figura 1) y debería continuar para la mayoría de las futuras versiones previsibles. Cambios significativos en Common Language Runtime (CLR) que se produjeron entre .NET 1.1 y 2.0 hacían imposible ampliar multitargeting a sencillamente cualquiera de la versiones existentes de la Plataforma. Lo bueno de multitargeting es que cualquier pieza de la IU de Visual Studio 2008 se adapta a la plataforma de destino. La caja de herramientas de los controles, configuraciones de compilador, lista de ensamblajes a referenciar, IntelliSense en objetos y, desde luego, binarios son todos específicos para la plataforma seleccionada.

((La plataforma de destino no es una elección definitiva. En cualquier momento, podemos subirla o bajarla de nivel para cualquiera de los objetivos soportados))

La plataforma de destino no es una elección definitiva. En cualquier momento, podemos subirla o bajarla de nivel para cualquiera de los objetivos soportados. Esto se hace desde las páginas de propiedades del proyecto en la Solution Explorer (Figura 2).

¿Deberíamos instalar Visual Studio 2008 si estamos manteniendo fundamentalmente las aplicaciones actuales 2.0 de la plataforma .NET? Sin duda, la gran noticia relacionada con Visual Studio 2008 es el soporte que ofrece para las aplicaciones 3.x.NET.


Sin embargo, incluso desde una perspectiva agnóstica de plataforma, hay algo que ofrece – un conjunto mejorado de servicios con especial atención hacia los desarrolladores de web. El depurador de JavaScript, CSS, diseñador de páginas maestras, y herramientas de ayuda para LINQ son todas ellas características disponibles de forma independiente desde la plataforma de destino.

Un poco de “azúcar sintáctico” para C# y VB

En Visual Studio 2008, C# y Visual Basic ofrecen unas cuantas características que ahorran tiempo y que básicamente dan al compilador la carga de crear el código requerido. Al final, estas características son sencillamente azúcar sintáctico que hacen que la programación en C# y VB sea más fácil y agradable.

“Automatic properties” es una característica que instruye al compilador para que añada de forma automática una implementación por defecto para los métodos getter/setter de una propiedad de clase. Este código es ahora perfectamente legal en una clase compilada con el compilador C# más nuevo:


public string ContactName get; set;

El compilador expande este código automáticamente de la manera siguiente:


private string contactName;

public string ContactName

get return contactName;

set contactName = value;


Las propiedades get/set generadas automáticamente no son equivalentes a campos públicos. Desde la perspectiva de los meta-datos, las propiedades y los campos son entidades bastante diferentes. La idea aquí es que sólo delegamos al compilador la creación de parte del código para las cañerías, en el escenario más común y sencillo. Posteriormente, siempre podemos volver y ofrecer nuestros propios métodos getter/setter.

(Las propiedades get/set generadas no son equivalentes a campos públicos. Desde la perspectiva de los meta-datos, las propiedades y los campos son entidades bastante diferentes)]

Los iniciadores de objetos son otro trozo de azúcar sintáctico para acelerar la creación de código que inicia un objeto. En vez de pasar por una lista potencialmente larga de instrucciones de tareas, podemos codificarlo de la siguiente forma:


Person person = new Person

FirstName=”Dino”,

LastName=”Esposito”,

Age=24

;

La idea se extiende a las colecciones, como en el siguiente código:


List friends = new List

new Person FirstName=”Nancy”, LastName=”Davolio”, Age=28 ,

new Person FirstName=”Andrew”, LastName=”Fuller”, Age=35 ,

:

;

Comparado con la sintaxis requerida en Visual Studio 2005, el ahorro es bastante obvio y puede fácilmente añadirse a decenas de líneas de código para procedimientos largos.

Lenguajes más ricos más allá del azúcar

Los lenguajes de programación no son inmutables. Especialmente cuando están estrechamente emparejados a un entorno de tiempo de ejecución como CLR, progresan según se va refinando y potenciando la maquinaria. Por ejemplo, la Plataforma 2.0 .NET suministraba un compilador C# con características adicionales frente al compilador para la Plataforma 1.x de .NET. En Visual Studio 2008 y con .NET 3.5 a bordo, podemos usar un C# significativamente más rico y lenguajes .NET de Visual Basic.

Ambos lenguajes incorporan ahora características que permiten la programación funcional y añaden claves específicas para Language Integrated Queries (LINQ).

Los métodos de extensión son una forma de extender el de otra forma codificado contrato de una clase al añadir nuevos métodos de forma programática sin crear una clase derivada o parcial. La idea tras los métodos de extensión es traer la flexibilidad del tipificado de pato (duck-typing) a un entorno fuertemente tipificado y compilado como el CLR. En la práctica, podemos usar métodos de extensión en el momento en que sintamos que una clase dada que estemos utilizando carece de un método que ayude.


Si no tenemos acceso al código fuente de esta clase, en Visual Studio 2008 definimos una extensión. Los métodos de extensión pueden definirse para cualquier clase, incluidas las clases nativas de .NET. El Listado número 1 muestra cómo extender la clase System.String con unos cuantos métodos como IsDate, IsInt32, y ToDate.

Un método de extensión se define como método estático en una clase estática. El ligado entre el método (pongamos, IsInt32) y el tipo (pongamos, System.String) se establece mediante la clave this en el prototipo del método:


public static bool IsInt32 (this string content)

El tipo que sigue la clave this es tratado como el tipo a extender. La Figura 3 muestra IntelliSense en acción en el tipo ampliado System.String.

El siguiente código ilustra cómo podemos usar estos nuevos métodos en nuestro código:


void btnDate_Click(object sender, EventArgs e)

string content = textBox1.Text;

if (content.IsDate())

DateTime date = content.ToDate();

label2.Text = String.Format(“Next day is 0”,

date.AddDays(1).ToString(“dd MMMM yyyy”));

else

label2.Text = “Not a valid date.”;


Los métodos de extensión se comprueban en el momento de la compilación y se pueden aplicar también a cualquier clase de origen o interfaz en .NET. (Se podría utilizar métodos de extensión para obtener una característica que parece semejante a los mix-ins. En general, un mix-in es una especie de interfaz con métodos implementados. Una clase que implementa un mix-in incluye –pero no hereda– todos los miembros que hay en la interfaz de los mix-ins.

Actualmente, C# y Visual Basic .NET no soportan originariamente mix-ins, aunque instruir a los compiladores para que produzcan el código para ello no pareció ser un gran esfuerzo. Con los métodos de extensión, podemos simular mix-ins en las versiones más recientes de C# y Visual Basic .NET.)

La clave var es otra nueva entrada interesante. Usada para calificar una variable, no indica una referencia ligada tarde, sino que simplemente indica que no conocemos el tipo de la variable en el momento de escribir. No obstante, el tipo no estará determinado en el tiempo de ejecución (ligado tarde), pero el compilador infiere el tipo a partir de la expresión asignada a la variable var. Por esta razón, se necesita una asignación inicial de valor para evitar un error del compilador. Cuando se utiliza var, se genera siempre una referencia de tipificado fuerte.

La clave var permite otra chula característica C# —el tipo anónimo. Este es un tipo sin nombre que definimos mediante la misma sintaxis de iniciador de objeto mencionada anteriormente:


var person = new

FirstName=”Nancy”,

LastName=”Davolio”,

Age=28

;

Para el CLR, los tipos anónimos y los que tienen nombre son exactamente la misma entidad. Los tipos anónimos pueden usarse en una variedad de escenarios, pero se han introducido fundamentalmente para soportar consultas LINQ.


Lo mismo se puede decir de las expresiones lambda. Las expresiones lambda se usan como una forma conveniente para crear delegados, especialmente (pero no exclusivamente) en LINQ. En .NET, un delegado es un envoltorio orientado a objetos para un puntero de función y señala hacia una función existente y con nombre en una clase. En .NET 2.0, los lenguajes gestionados ofrecían un constructor nuevo y potente —los métodos anónimos.

Básicamente, tenemos un snippet de código explícito definido dentro de la línea y utilizado como un método sin nombre de alguna clase. Las expresiones Lambda son un refinamiento más de la idea de un método anónimo, sólo que menos verboso y más elegante.

Servicios LINQ

La mayoría de las aplicaciones Windows y web se centran en alguna especie de repositorio de datos, normalmente una base de datos relacional. Para recuperar datos, tenemos que usar cada vez una API distinta. Puede ser SQL para las bases de datos relacionales, XQuery y XPath para los documentos XML, alguna interfaz (ICollection, por ejemplo) para colecciones y matrices. El objetivo principal de LINQ es unificar este modelo proporcionando una plataforma ad hoc. De forma muy conveniente, esta plataforma de consulta está conectada a algunas claves nuevas en C# y VB:


int() fiboNumbers = new int() 0,1,1,2,3,5,8,13,21,34;

var data = from n in fiboNumbers

where n % 2 == 0

select n;

Por raro que parezca, esto es código C# que se compila en Visual Studio 2008. Las nuevas claves son from, where, y select. Su significado está realmente próximo al significado que las claves análogas tienen en SQL. Traducido al lenguaje humano, la consulta asigna a la variable de datos todos los elementos en el objeto consultable (una colección, en este caso) que coincide con la condición especificada (todos los números pares en este caso). Esta es otra expresión LINQ que usa lambdas:


var data = (from c in customers

where c.Country == “USA”

select c).SelectMany(c => c.Orders);

Una expresión lambda se caracteriza por el operador =>, prefijado por parámetros de entrada, y seguido por la expresión paramétrica a evaluar. El código precedente selecciona a todos los clientes estadounidenses y alisa el conjunto de resultados a un listado de pedidos. Sin la clave SelectMany y el lambda de entrada, lo que obtenemos es una matriz de colecciones de pedidos—no un listado de objetos de pedido.

Los operadores LINQ funcionan en objetos que implementan una particular interfaz —IQueryable. .NET 3.5 cuenta una serie de objetos de este tipo. Son envoltorios para contenedores de datos bien conocidos como colecciones, documentos XML, DataSets, y otras bases de datos de SQL Server. El modelo es además extensible, de manera que terceros pueden suministrar su propio motor LINQ para consultar bases de datos Oracle o quizá el sistema de fichero.

Lo más interesante de los objetos consultables LINQ es el objeto que envuelve una base de datos SQL Server 200x. Es una clase definida de usuario que hereda de una clase base denominada DataContext. Visual Studio 2008 proporciona una herramienta visual ad hoc denominada “O/R designer”; véase la Figura 4. Después de establecer una conexión de base de datos en la ventana Server Explorer, ponemos tablas y procedimientos almacenados en el diseñador y obtenemos una clase generada dinámicamente con la que trabajar. A continuación, simplemente instanciamos esta clase y la usamos como el objeto consultable:


NorthwindDataContext dataContext =

new NorthwindDataContext();

var data = from c in dataContext.Customers

where c.Country == “Spain”

select c;

Podemos después ir por el conjunto retornado de resultados usando una sentencia for/each o simplemente ligar el objeto a un control ligado a datos.

Proyectos de Visual Studio 2008

Los servicios LINQ se extienden sobre todo tipo de proyectos en los que tienen sentido el acceso y la consulta a bases de datos. Pero otras mejoras son específicas para proyectos web. Por ejemplo, el editor de páginas maestras se ha potenciado para soportar completamente páginas maestras anidadas. Las páginas maestras anidadas ya estaban funcionando en ASP.NET 2.0, pero no estaban totalmente soportadas por el diseñador visual de Visual Studio 2005. Además, Visual Studio 2008 trae soporte para la edición de visión partida y un nuevo diseñador CSS.


Un depurador de JavaScript e IntelliSense extendido a las clases de JavaScript completan la oferta para desarrolladores de web. Desde el punto de vista de las plataformas, la Plataforma 3.5 de .NET tiene soporte incorporado para AJAX que va un poco más allá de lo que ya ha salido al mercado como Extensiones 1.0 ASP.NET AJAX para ASP.NET 2.0. Además de características como UpdatePanel y ScriptManager, encontramos Partes Web capacitadas para AJAX, soporte WCF para JSON, además de arreglos de fallos técnicos y mejoras para las prestaciones.

((Los servicios LINQ se extienden sobre todo tipo de proyectos en los que tienen sentido el acceso y la consulta a bases de datos.))

En lo que respecta a Windows, en Visual Studio 2008 por fin podemos tener un auténtico diseñador WPF con una caja de herramientas y una caja clásica de Propiedades. La Figura 5 muestra un avance de esta característica.

Visual Studio 2008 tiene también aspectos especialmente creados para facilitar las pruebas y la completa gestión de la aplicación, como Visual Studio 2008 Team Suite y Visual Studio 2008 Team Foundation Server. Lo bueno es que el soporte para la comprobación de unidades no es sólo más rápido, sino que se incluye en la edición Profesional de Visual Studio 2008.

WCF y el soporte del flujo de trabajo

La versión 3.0 fue la primera versión de .NET que se envió sin una versión dedicada de Visual Studio. Microsoft lanzó unas cuantas extensiones a Visual Studio para facilitar a los desarrolladores la compilación de servicios WCF y flujos de trabajo, pero de hecho sólo separa las cargas de trabajo.


En Visual Studio 2008 se incluye WCF y proyectos de flujo de trabajo junto con los correspondientes diseñadores renovados. La Figura 6 muestra el diseñador de flujo de trabajo cuya caja de herramientas distingue entre la versión 3.0 y las actividades 3.5. Las actividades más novedosas incluyen una actividad para enviar datos JSON al servicio WCF y recibirlos desde el mismo.

Conclusión

Visual Studio es el buque insignia de Microsoft para los desarrolladores y Visual Studio 2008 es la primera versión de Visual Studio que soporta múltiples versiones de .NET. Podemos elegir la plataforma de destino cuando creamos el proyecto y nos encontramos con una IDE que sólo ofrece controles y componentes adecuados a la plataforma de destino.

Las capacidades mejoradas de editores y diseñadores, sin embargo, están compartidas por todos los proyectos, independientemente de la plataforma. Visual Studio 2008 integra totalmente las herramientas IDE para crear flujos de trabajo además de ensamblajes WCF y WPF. También aporta capacidades AJAX en los proyectos web ASP.NET y añade JavaScript a la lista de lenguajes para el que puede ofrecer características de depurado grave y de IntelliSense.

Disponible en una variedad de formatos como Standard, Professional, y Team Suite, está también disponible en versiones Express gratuitas. DDJ

Dino Esposito escribe el boletín ASP.NET-2-The-Max para DDJ. Se puede contactar con [weblogs.asp.net/despos/.

Etiquetas

Noticias relacionadas

Comentarios

No hay comentarios.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Debes haber iniciado sesión para comentar una noticia.