Developer's Diary

22 abril, 2013

Portable Library

Dentro del universo de .Net, estamos teniendo muchas plataformas en las cuales desarrollar. Puede interesarnos el publicar un mismo proyecto en varias plataformas, como por ejemplo una aplicación en Windows 8 y Windows Phone.

En este tipo de casos hay mucho código que nos interesa poder reutilizar en todas las plataformas, para evitar volver a codificar todas esas funcionalidades, nace el concepto de las librerias portables.

¿Qué son las librerias portables?

Las librerías portables nos permiten tener un conjunto de código común entre varias plataformas, si esto lo combinamos al patrón MVVM que se encuentra de moda en el desarrollo .Net, podemos reutilizar toda la parte del desarrollo, de nuestra vista modelo y modelo, teniendo únicamente que volver a codificar las vistas.

Además, existen ciertas parte de la api, como los servicios, que pueden resolverse de distintas maneras en las distintas plataformas. Como puede ser el uso concreto de la API, como puede ser el servicio de GPS, del almacenamiento, etc.

Para poder hacer uso de las librerías portables, necesitamos descargar las Portable Library Tools, que se encuentran en este enlace para Visual Studio 2010. En la versión de 2012, ya se encuentra completamente implementado.

Tras elegir la versión de biblioteca de librería portable.

LibreriaPortable

Nos aparecerá un cuadro de dialogo, donde elegir las plataformas, donde vamos a poder usar nuestra libreria portable.

Plataformas

Ya tenemos nuestro proyecto con la librería portable. Ahora a implementar el servicio de GPS, para poder ser usado desde nuestra Vista Modelo en nuestra app.

Vamos a crear una interfaz, llamada IFileStorage que será el elemento que consumiremos desde nuestra Vista Modelo, para generalizar la plataforma en la que lo vayamos a usar. También crearemos la vista modelo que consumiremos desde las distintas vistas y la encargada de usar nuestro fichero.

Nuestra interfaz será sencilla, leerá de un fichero de texto y escribirá de un fichero de texto, por lo tanto. Crearemos un método llamado Save y otro Load. Ambos contendrán un parametro para el nombre del fichero y además Save, tendrá el contenido del mismo.

Como cada plataforma tendrá su uso propio de los distintos servicios, debemos crear ahora sí, una biblioteca de clases propia para su uso. Por lo tanto deberemos crear una libreria para cada tipo de plataforma, que implementará nuestra interfaz.

En este ejemplo vamos a implementar la libreria para Windows Phone, Windows 8 y Windows. Por lo tanto tenemos que crear tres librerías una relacionada con cada plataforma. Para mantener el estilo, nombraremos el espacio de nombres de esta libreria con el nombre de la libreria portable y la plataforma a usar, en nuestro caso. MyPortableLibrary.W8, MyPortableLibrary.WP y MyPortableLibrary.Windows.

Para respetar el modelo de MVVM, vamos a incluir las distintas clases de control de ficheros, dentro del modelo. Así pues tendremos tres proyectos creados con la misma clase, es recomendable que cada clase dentro de estos proyectos tengan un nombre distinto, para que sea más intuitivo para el desarrollador y también por si queremos implementar el testing.

Agregamos la referencia de la libreria portable y posteriormente implementamos en nuestra clase fichero la interfaz de la misma. Solo nos queda programar la lógica para el uso de ficheros en cada plataforma.

Después de eso, tendríamos que crear otro proyecto que para cada plataforma e incluir ahí las distintas vistas. Y agregar también la librería portable, para hacer uso del ViewModel y también la respectiva relación de la portable library en esa plataforma en cuestión, creamos las vistas y ya tenemos una aplicación multiplataforma.

Un detalle a tener en cuenta muy importante y que tenemos en cuenta en el ejemplo de código, es que si queremos hacer uso de las nuevas plataformas, entramos en el sistema async, para poder soportar en las Silverlight 4 y Windows Phone 7 deberemos agregar la librería Microsoft.Bcl.Async, disponible desde el paquete NuGet. Es tan sencillo como marcar con el botón derecho sobre nuestro proyecto de libreria portable y pulsar sobre Administrar paquetes Nuget y buscar las librerias BCL.

BCL

Nota: Para poder hacer uso de ellas, las librerias BCL comienzan a ser compatibles con Windows Phone 7.5. Si no, no podremos agregarlas.

A partir de ahí solo tenemos que crear tantas librerias como plataformas queramos extender nuestra libreria portable, posteriormente tendremos que crear un nuevo proyecto ya de aplicación con cada una de las plataformas que queramos extender.

Adjunto el ejemplo de todo lo que he explicado, en mi caso he implementado nuestro servicio a WPF, Windows 8 y Windows Phone. Pero solo he implementado la vista de Windows Phone. Implementar las vistas de WPF y Windows 8 no es demasiado complicado, solo tendremos que crear la vista y asociar nuestras acciones a los distintos elementos de la vista.

Aquí os dejo el código.

Un saludo y Happy Coding!

Anuncios

1 comentario »

  1. […] Como bien sabeis, hace poco escribí un buen artículo de las Portable class library, que te permiten aumentar el potencial de desarrollo. Lo podeis ver aquí. […]

    Pingback por Aumentando el potencial de las Portable Class Library. Xamarin Tools | Developer's Diary — 1 junio, 2013 @ 1:37 PM


RSS feed for comments on this post. TrackBack URI

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

A %d blogueros les gusta esto: