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.
- La aplicación para Android de Xamarin se cierra inmediatamente después del lanzamiento
- ¿Cómo se actualiza a Android SDK 25.1.3?
- Cómo detener un proceso de System.Diagnostics.Process y obtener las estadísticas al final
- Luchando por entender el manejo de excepciones de Xamarin
- Evitar que la actividad se reinicie cuando cambie la orientación
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?
- 2016-10-05 nivel de seguridad de nivel rompe Nexus-9 Xamarin
- .jar la importación de la biblioteca android en el proyecto Xamarin
- RelativeLayout en el cálculo del ancho de StackLayout
- SSLHandshakeException en Android 4.4 y menor
- SDK de Android instalado, pero adb.exe ausente
- Tejido TwitterKit en Xamarin
- Cómo resolver: se produjo un error inesperado Inicializando Android Designer "en VS 2015 con Xamarin
- Extracción de datos del archivo CSV (tabla de fusión y solución alternativa de kml)
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/
- Cómo crear aplicaciones de Android utilizando Delphi
- Suprimir AndroidManifest.xml Advertencia relacionada con minSdkVersion