Xamarin Shared Projects vs Bibliotecas de clases portátiles

Estoy tratando de averiguar cuál es la mejor manera de ir para nuestro proyecto.

Biblioteca PCL o Proyecto Compartido de Xamarin.

En el enlace de documentación de Xamarin aquí se dice que una regla de oro es elegir proyecto compartido cuando no compartiremos la biblioteca. El proyecto compartido se puede escribir con # if's para asegurarse de que funciona con múltiples plataformas. Esto también provoca que algunos problemas con la refactorización #if no estén activos.

Sin embargo, tengo la sensación de que no está bien poner este código en una clase compartida. Si un código que está disponible para Windows, Android e IOS plataformas móviles está utilizando un proyecto compartido en lugar de PCL – significa que estamos utilizando #ifs dentro de proyecto compartido en lugar de escribir código específico de la plataforma en un proyecto específico de la plataforma.

Esto está intentando hacer la ayuda de artículos no PCL vía #ifs y hacer el código compartido más complejo y más duro de mantener. ¿No debería ser éste el trabajo que debe realizar Xamarin para mejorar la base de código .NET de 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 para una plataforma específica desde el propio proyecto de la plataforma – 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. Por ejemplo, usted podría poner una interfaz en un PCL, a continuación, la aplicación de la misma en el código compartido SI la aplicación tendría una cantidad decente de código compartido.

No me gustan las banderas del compilador tampoco, preferiría utilizar clases parciales. De esta manera puede evitar la mayoría, o incluso todos, de las banderas del compilador. Class1.cs entraría en proyecto compartido y el resto iría a sus proyectos específicos de plataforma.

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

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

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

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

Usted no debe tratar eso como un estímulo de Xamarin, ya que tanto usted como Xamarin son conscientes de los inconvenientes.

Así que "ser inteligente".

He visto una gran aplicación de Xamarin.iOS y Xamarin.Android construida para un mayor minorista de ropa del Reino Unido con MVVM fuerte usando Biblioteca Compartida y Clases Parciales de manera muy eficaz. Sólo un par de escenarios muy específicos donde necesitábamos usar IFDEFs. De esa experiencia yo iría a menudo esta ruta por defecto.

Dicho esto, es bueno tener en cuenta que el estándar 2.0 de .NET está llegando, lo que probablemente hará que este debate sea menos una pregunta común, ya que trae su propio enfoque (similar, pero muy diferente a PCL) … https: // blogs. Msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/

  • Xamarin vs iOS nativo y Android
  • Acceso denegado (0x80004005) en Process.Start () en la aplicación android
  • Instalar GooglePlayServices con NuGet me da un error de Install-Package
  • Xamarin - Error Fixing "La tarea Aapt falló inesperadamente"
  • Asegurar cadena en APK
  • Xamarin AndroidManifest.xml es diferente al de Visual Studio
  • ClassNotFoundException al inflar una biblioteca de enlace usando Xamarin
  • Android - Bitmap.CreateBitmap - excepción de puntero nulo
  • ¿Cómo obtener GoogleApiClient en Xamarin?
  • BluetoothAdapter ActionDiscoveryFinished
  • Resolución de DNS falla en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.