standard pcl net android .net mono xamarin portable-class-library

android - pcl - Xamarin Shared Projects vs Portable class libraries



xamarin pcl vs shared (4)

Ambos tienen su lugar. Por ejemplo, podría poner una interfaz en una PCL, y luego implementarla en código compartido SI la implementación tendría una cantidad decente de código compartido.

Tampoco me gustan los indicadores del compilador, preferiría usar clases parciales. De esta manera puede evitar la mayoría, o incluso todos, de los indicadores del compilador. Class1.cs entraría en un proyecto compartido y el resto entraría en sus proyectos específicos de plataforma.

Class1.cs Class1.ios.cs Class1.android.cs Class1.wp8.cs

Estoy tratando de descubrir cuál es la mejor forma de avanzar en nuestro proyecto.

Biblioteca PCL o Proyecto Compartido de Xamarin.

En el enlace de documentación de Xamarin aquí , dice que una regla general es elegir un proyecto compartido cuando no compartiremos la biblioteca. El proyecto compartido se puede escribir con # if''s para asegurarse de que funciona con varias plataformas; esto también causa algunos problemas con la refactorización de #ifs no activada.

Sin embargo, tengo un presentimiento de que no es correcto poner este código en una clase compartida. Si un código que debe estar disponible para Windows, Android y las plataformas móviles IOS está utilizando un proyecto compartido en lugar de PCL, significa que estamos usando #ifs dentro del proyecto compartido en lugar de escribir el código específico de la plataforma en un proyecto específico de la plataforma.

Esto está intentando hacer que los artículos que no son PCL sean compatibles con #ifs y hacer que el código compartido sea más complejo y más difícil de mantener. ¿No debería ser este el trabajo que debe realizar Xamarin para mejorar la base de código .NET PCL?

Y también esto significa que estamos poniendo características específicas de la plataforma en el proyecto compartido y no el proyecto específico de la plataforma, es decir, ocultando la complejidad de una plataforma específica desde el proyecto de la plataforma en sí, lo que se siente mal en términos de arquitectura.

¿Tengo razón (en ese caso estoy en conflicto con la documentación de Xamarin) o me estoy perdiendo algo?


Ambos tienen su lugar. Si su código es completamente portátil, recomendaría usar una PCL. Si necesita utilizar API específicas de la plataforma, puede hacerlo con una PCL usando varias técnicas (generalmente, la creación de una abstracción portátil para la funcionalidad), pero si se trata de un caso aislado, a veces es más simple usar un #if.

Para obtener una lista general de pros y contras, consulte mi respuesta a una pregunta sobre PCL versus archivos vinculados . Los proyectos compartidos son similares a los archivos vinculados, pero no tienen algunas de las desventajas de las herramientas.


He visto una gran aplicación Xamarin.iOS y Xamarin.Android desarrollada para un importante minorista de ropa del Reino Unido con MVVM fuerte que usa Shared Library y Partial Classes de manera muy efectiva. Solo un par de escenarios muy específicos donde necesitábamos usar IFDEFs. A partir de esa experiencia, a menudo iba por este camino por defecto.

Habiendo dicho eso, es bueno notar que el .NET estándar 2.0 está llegando, lo que probablemente hará que este debate sea menos una pregunta común, ya que trae su propio enfoque (similar pero realmente bastante diferente de PCL) ... https://blogs.msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/


Mi impresión es que enumeraron las directivas del compilador en Beneficios de bibliotecas compartidas, simplemente porque era una característica que PCL no admite.

No debes tratar eso como un aliento de Xamarin, ya que tú y Xamarin están conscientes de los inconvenientes.

Entonces, "sé inteligente".