.NET Standard, una librería para dominarlos a todos

Como he comentado en uno de los posts anteriores, en una de las charlas que he dado en el #NetRaf2017 comenté el estado de la plataforma .NET en el 2017. Uno de los puntos interesantes para comentar en mayor detalle es el asociado a .NET Standard, una librería que llega para dominarlos a todos.

Estado actual

Al día de hoy tenemos 3 grandes pilares que conforman la plataforma .NET, cada uno con un propósito bien definido (y muy distinto del que tienen los demás pilares):

NetStandard - Pilares.png

Veamos cada uno en más detalle:

.NET Framework:

Es la alternativa que veníamos usando hasta el día de hoy en el desarrollo de nuestras aplicaciones, también conocida como Full Framework en la actualidad. Se distribuye con el sistema operativo (es lo que estamos acostumbrados hasta el día de hoy, para correr una aplicación .NET debíamos tener la versión correspondiente del Framework instalada en el equipo.

.NET Core:

Es la versión multiplataforma del Framework, más reducida y compacta. Tiene un énfasis muy fuerte en lo que es la optimización del rendimiento, además de dar muchas soluciones a los desarrolladores de forma nativa que antes requerían siempre instalar dependencias adicionales. Lo podemos ver como una versión aggiornada del Full Framework. Dentro de los cambios que introduce, el Framework se distribuye con la aplicación, por lo cual las aplicaciones que hagamos son 100% autocontenidas.

Xamarin:

Plataforma que nos permite hacer desarrollos que corran en gran parte de las aplicaciones móviles, basada en el runtime de Mono (más detalles en este post que escribí introduciendo a Xamarin). Al igual que con .NET Core, el Framework se distribuye con la aplicación, lo cual hace que estas aplicaciones tengan un tamaño final más alto que una equivalente hecha en Java para Android o en Swift para iOS.

Lo que pasa aquí es que cada una de estas plataformas tiene una forma diferente de implementación, particularmente en las API’s a bajo nivel que cada una implementa:

NetStandard - EstadoActual

Esto genera que como desarrolladores no tengamos una forma para proveer librerías de forma unificada a toda la plataforma .NET, al menos de una forma transparente sin caer en el mundo de la compilación condicional.

La solución

Al rescate de este problema (y de las posibles aberraciones que se podrían generar) aparece .NET Standard.

A nivel general, .NET Standard es una especificación de las distintas APIs que .NET en general nos disponibiliza para cada una de las plataformas de ejecución que haya disponibles.

En otras palabras, podemos verlo como una capa de abstracción adicional de la plataforma final donde se ejecutará nuestra aplicación, al saber que cumplimos con el uso de las APIs del .NET Standard estamos seguros de la compatibilidad que tendrá nuestro código para la ejecución en las plataformas necesarias.

Esta abstracción nos da como ventaja adicional una mayor resistencia a futuros cambios que puedan hacerse en la plataforma .NET en general, ya que no estamos acoplados fuertemente a la API sino que tenemos esta capa.

El resultado de este esquema aplicado al diagrama anterior es el siguiente:

NetStandard - Objetivo

Lo primero que debemos saber es que hay varias versiones del .NET Standard actualmente, por lo que nuestra elección no será directamente usarlo sino también cuál usar. La primera versión de .NET Standard es la 1.0, la cual salió en conjunto con .NET Core 1.0. Actualmente está disponible hasta la versión 1.6, pero ya viene en camino la versión 2.0 con varias mejoras. Lo que se debe considerar es:

  • Mayor es la versión, más APIs hay disponibles.
  • Menor es la versión, más plataformas la implementan.

La siguiente tabla nos detalla las versiones de .NET Standard y las plataformas (y sus versiones) que soporta:

.NET Standard 1.0 1.1 1.2 1.3 1.4 1.5 1.6 2.0
.NET Core 1.0 1.0 1.0 1.0 1.0 1.0 1.0 2.0
.NET Framework (with tooling 1.0) 4.5 4.5 4.5.1 4.6 4.6.1 4.6.2
.NET Framework (with tooling 2.0) 4.5 4.5 4.5.1 4.6 4.6.1 4.6.1 4.6.1 4.6.1
Mono 4.6 4.6 4.6 4.6 4.6 4.6 4.6 vNext
Xamarin.iOS 10.0 10.0 10.0 10.0 10.0 10.0 10.0 vNext
Xamarin.Android 7.0 7.0 7.0 7.0 7.0 7.0 7.0 vNext
Universal Windows Platform 10.0 10.0 10.0 10.0 10.0 vNext vNext vNext
Windows 8.0 8.0 8.1
Windows Phone 8.1 8.1 8.1
Windows Phone Silverlight 8.0

 

NetStandard - Versiones

Otro punto importante asociado a las versiones es que se pueden plantear como círculos concéntricos: una versión superior siempre incorporará las APIs de las versiones previas.

Finalmente son inmutables, es decir que una vez que son liberadas no sufren modificaciones. Las mismas serán agregadas en versiones posteriores manteniendo la compatibilidad con las versiones anteriores, tal como se mencionó antes.

 

¿Y cómo lo aplicamos?

A nivel práctico/código, .NET Standard es un tipo de proyecto más que tenemos disponible en Visual Studio, bajo el esquema de librería de clases. Es que ese es su objetivo, reemplazar las librerías de clases portables que estábamos usando con anterioridad.

Para crearlos veremos la siguiente opción dentro de los templates de proyectos disponibles en Visual Studio:

NetStandard - TemplateProyecto.png

Una vez creado, el concepto es similar al que tenemos con las librerías de clases portables. Para configurar la versión de .NET Standard que usamos, deberemos ir a las propiedades del proyecto, y dentro de la pestaña de Application tendremos la opción de seleccionar la versión de .NET Standard a usar.

NetStandard - CreacionProyecto.png

Otro punto interesante que nos ofrece este tipo de proyectos es la generación automática de paquetes Nuget de forma nativa, con toda su configuración. Dentro de las propiedades contamos con la pestaña Package, donde podremos configurar si queremos que el paquete se genere al momento de compilar, además de toda la información del paquete que se generará.

NetStandard - ExportacionNuget.png

Finalmente les dejo el enlace del artículo Introducing .NET Standard, para que puedan profundizar sobre el tema más allá de lo visto aquí.

Gracias por leer!!

Anuncios

Un comentario en “.NET Standard, una librería para dominarlos a todos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s