Portable Class Library (PCL) vs Shared Projects en Xamarin Forms

Si navegamos por la web buscando ejemplos de proyectos o tutoriales de  Xamarin Forms , nos encontraremos  muchos ejemplos usando Shared Projects, por esta razón la mayoría de los recién  iniciados a Xamarin basan sus primeras aplicaciones en estos ejemplos.

Además de los casos de uso heredados, hay razones muy limitadas para usar SharedProjects en aplicaciones Xamarin Forms, las PCL son el método preferido en la mayoría de los escenarios.

En una oportunidad participe en un webinar dictado por el MVP Humberto Jaimes donde toco este tópico, tratare de explicar en este post  lo aprendido y el  research que hice a parte para documentarme.

Shared code

Este al momento de compilar incorpora en cada assembly una referencia al proyecto compartido. Esto puede ser útil cuando deseamos crear assembly por  separados que se orientan a plataformas específicas, pero todavía el código debe ser compartido.

 

Portable Class Library (PCL)

Los proyectos apuntan a perfiles específicos que soportan un conjunto conocido de clases / características BCL. Sin embargo, el lado negativo de PCL es que a menudo requieren esfuerzo arquitectónico adicional para separar el código específico del perfil en sus propias bibliotecas.

Aplicando al mundo real

Con  SharedProject podemos crear las clases como de costumbre, pero si queremos hacer algo específico de la plataforma que estemos trabajando, tenemos que implementar una directiva de compilación en nuestro código.

Por ejemplo.

public string GetTargetPlatform()
{

  var path = "unknown";
  
  #if WINDOWS_PHONE
  path = "windowsphone";
  #else
  
  #if __SILVERLIGHT__
  path = "silverlight";
  #else
  
  #if __ANDROID__
  path = "android";
  #else
  
  #if __IOS__
  path = "iOS";
  #else
  
  
  return path;
}

Estas clases parciales pueden ser buenas para pequeños proyectos o demos.  Sin embargo, si la App tiene varios desarrolladores trabajando en ella  o es  algo más que una aplicación realmente simple o proyecto de demostración, la capacidad de mantenimiento de un proyecto compartido se vuelve menos agradable debido a la falta de control arquitectónico y vamos a estar  luchando por encontrar lo que realmente se está ejecutando en cada plataforma.

Un problema de los shared, es que en un proyecto compartido tiene problemas al definir un nombre de ensamblado. Por ejemplo, en xaml si desea hacer referencia a un control y hacer referencia a un nombre de assembly, cada proyecto nativo tendrá un nombre de assembly distinto, por lo que deberá realizar más ifdefs o OnPlatforms, o nombrar cada proyecto nativo con el mismo nombre de assembly.

las PCLs

No crean que las PCLs no vienen con sus propios  dolores de cabeza pero, proporcionan una asombrosa manera de escribir código fácil  de mantener y probarlo  una vez que la aprendemos a utilizar en múltiples plataformas. Cuando se escribe una PCL, no es necesario insertar directivas de compilación  para cambiar el código en función de cada plataforma, se seleccionan las plataformas que se van a admitir y luego se inicia a escribir el código de nuestra APP. Cuando creamos un PCL, luego podemos ir a Propiedades y establecer los Targets para el proyecto.

targetprofile

PCL son proyectos que pueden dirigirse a diferentes plataformas, podemos elegir cuáles y luego esta nos da acceso a ciertos conjuntos y funciones, dependiendo de cuáles seleccionemos. Las diferentes combinaciones de objetivos para PCL se denominan perfiles y cada perfil tiene su propio número. El perfil más común y recomendado para los proyectos Xamarin Forms es Profile259.

Beneficios

Algunos beneficios del uso de PCL son:
Pruebas de unit testing mas sencillas de aplicar
Código mas facil de leer
Mayor portabilidad
Mejor implementacion  del código

Cual usar ?

Yo en lo personal para grandes proyectos de arquitecturas complejas y una gran necesidad de código portable recomiendo las PCL, en cambio para proyectos pequeños, prototipos y demos recomiendo usar Shared Projects.

 

Si no estas de acuerdo en algo o tienes algo que agregar déjalo en los comentarios ! 🙂

 

 

Comments

Un comentario

  1. Buen enfoque sobre el tema, aunque es importante también decir que hay muchas personas de la comunidad Xamarin (como el mismo Miguel de Icaza) que prefieren Shared Projects sobre PCL incluso para aplicaciones grandes – no es mi caso por las dudas jaja-. Hay varias formas de masterizarlo y optimizar la mantenibilidad, hace poco justamente me encontré con este articulo de Matthew Soucoup https://codemilltech.com/banish-compiler-directives-from-shared-projects/ sobre cómo evitar directivas de compilación

Dejar una contestacion

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