Validando ensamblados para desarrollo multiplataforma

Hoy en día está surgiendo la necesidad de llevar la lógica de negocio a través de diferentes plataformas evitando reescribir código para cada una de ellas, las ventajas que se pueden obtener de ello son bastante interesantes ya que hasta cierto punto reducirían los tiempos y el esfuerzo a la hora de desarrollar  proyectos (todos sabemos que no existen balas de plata) y es que piénsenlo trabajar en un escenario donde puedas realizar pruebas a la funcionalidad de tu lógica de negocio y en caso de ser necesario solucionar los errores en un solo ensamblado en lugar de ir a través de cada uno de los proyectos reduce o al menos centraliza el esfuerzo que el proyecto requiere, pues bien con el lanzamiento en el último evento de Microsoft de .Net Core podemos tener funcionalidad en una forma vertical entre las plataformas .Net.

.Net Core ¿Qué es eso?

En resumen es una nueva implementación del .Net Framework modular, Open Source y que a diferencia de proyectos como Mono es la versión de Microsoft y por tanto va en relación con el framework actual de las aplicaciones .Net. Una vista rápida de esto queda en las siguientes dos imágenes.

PA0

PA01

Como podrás darte cuenta en la segunda imagen está actualmente disponible para aplicaciones del Store de Windows, ASP.Net 5 y aunque no aparecen las plataformas también tiene compatibilidad con Xamarin.

Si deseas conocer más acerca del .Net Core te recomiendo el siguiente post donde además de ver las características y componentes de .Net Core, te mencionan todo el trabajo y consideraciones que se tuvieron que realizar para que el proyecto viera la luz (vaya que son escenarios que no me había imaginado, pero que surgen con 1.8 billones de máquinas a tener en cuenta :S ), además podrás leer por que aparece la capa del Runtime Adaption Layer,el que ha llevado a la decisión de aún mantener las  implementaciones de algunas características fuera de este proyecto, lo cual era de esperarse ya que no todas ellas hacen sentido en todas las plataformas y se vuelve necesario dejar fuera cierta funcionalidad y por último veras que la forma de obtener el .Net Core es a través de proyectos que se encuentran en Nuget.

Una vez he dado esta corta descripción imaginemos el siguiente escenario, tenemos la lógica de negocios que hemos implementado en nuestra Windows Phone App y como hemos hecho un excelente trabajo deseamos utilizarla para nuestros proyectos en otras plataformas, pues bien antes de que comiences a agregar tu proyecto de PCL para posteriormente utilizarlo en Android, iOS o ASP.Net te recomiendo que utilices .Net Portability Analyzer.

.Net Portability Analyzer

.Net Portability Analyzer es una extensión de Visual Studio que nos permite conocer el porcentaje de código que podemos reutilizar de nuestros ensamblados a través de diferentes plataformas por medio de configuraciones muy sencillas, para su instalación solo necesitamos entrar en el menú Tools -> Extensions and update y posteriormente buscar la extensión.

PA1

Una vez hemos descargado e instalado la extensión tendremos la opción de seleccionar las plataformas para las que deseamos analizar el ensamblado para esto es necesario ir al menú Tool->Options y seleccionar .Net Portability Analyzer esto nos mostrará un desplegado de las tecnologías para las que podemos realizar los análisis.

PA4

Una vez tenemos configuradas las plataformas podemos realizar dos tipos de análisis:

  • La primera es analizar el ensamblado que ya se ha generado para lo cual elegiremos Analyze Assembly Portability en el menú analyze

PA3

  • La segunda es analizar el proyecto que tenemos en Visual Studio y para esto daremos click derecho sobre el proyecto que deseamos analizar y seleccionamos Analyze Assembly Portability en el menú analyze.

PA2

Ambas opciones nos mostrarán el porcentaje de código que es común para las plataformas y sugerencias en caso de existir alguna forma de adaptar nuestro código, de lo contrario tendremos que modificar nuestro proyecto e incluir la funcionalidad para cada una de las plataformas.

PA5

Sin duda este tipo de ayuda nos será de vital importancia ya que podremos saber con antelación los cambios que necesitamos para mantener la funcionalidad dentro de nuestro ensamblado y en caso de no existir alguna opción disponible realizar las implementaciones necesarias en cada plataforma, por que como ya hemos dicho .Net Core es una parte del .Net Framework, por tanto algunas funciones no están disponibles en él.