web-dev-qa-db-fra.com

Xamarin Shared Projects vs bibliothèques de classes portables

J'essaie de déterminer quelle est la meilleure façon de mener notre projet. 

Bibliothèque PCL ou projet partagé de Xamarin. 

Dans le lien La documentation de Xamarin, ici , il est dit qu’une règle générale est de choisir un projet partagé lorsque nous ne partagerons pas la bibliothèque. Le projet partagé peut être écrit avec # if pour s’assurer qu’il fonctionne avec plusieurs plates-formes. Cela pose également des problèmes avec le refactoring #if non actif.

Pourtant, j’ai le sentiment que ce n’est pas bien de mettre ce code dans une classe partagée. Si un code devant être disponible sur les plates-formes Windows, Android et IOS utilise un projet partagé au lieu de PCL, cela signifie que nous utilisons #ifs dans un projet partagé au lieu d'écrire du code spécifique à une plate-forme. projet spécifique. 

Ceci essaye de rendre le support d'éléments non PCL via #ifs et de rendre le code partagé plus complexe et plus difficile à maintenir. Cela ne devrait-il pas être le travail à faire par Xamarin pour améliorer la base de code PCL .NET? 

Cela signifie également que nous intégrons des fonctionnalités spécifiques à la plate-forme dans le projet partagé, et non le projet spécifique à la plate-forme - c’est-à-dire que nous masquons la complexité d’une plate-forme spécifique dans le projet de plate-forme elle-même - ce qui est faux en termes d’architecture.

Ai-je raison (dans ce cas, je suis en conflit avec la documentation Xamarin) ou ai-je oublié quelque chose?

24
user3141326

Les deux ont leur place. Par exemple, vous pouvez mettre une interface dans un PCL, puis l'implémenter en code partagé SI l'implémentation aurait une quantité décente de code partagé.

Je n'aime pas les drapeaux du compilateur non plus, je préférerais utiliser des classes partielles. De cette façon, vous pouvez éviter la majorité, voire la totalité, des drapeaux du compilateur. Class1.cs entrerait dans un projet partagé et le reste irait dans des projets spécifiques à leur plate-forme.

Class1.cs
Class1.ios.cs
Class1.Android.cs
Class1.wp8.cs
18
SKall

Ils ont tous deux leur place. Si votre code est entièrement portable, je vous recommande d'utiliser un PCL. Si vous devez utiliser des API spécifiques à une plate-forme, vous pouvez le faire avec une PCL en utilisant diverses techniques (impliquant généralement la création d'une abstraction portable pour la fonctionnalité), mais s'il s'agit d'un cas isolé, il est parfois plus simple d'utiliser un #if.

Pour une liste générale des avantages et des inconvénients, voir ma réponse à une question sur PCL versus fichiers liés . Les projets partagés ressemblent aux fichiers liés, mais ils ne présentent pas les inconvénients liés aux outils.

6
Daniel Plaisted

Mon impression est qu'ils ont répertorié les directives du compilateur sous Avantages des bibliothèques partagées, simplement parce que c'était une fonctionnalité que PCL ne prend pas en charge. 

Vous ne devriez pas considérer cela comme un encouragement de Xamarin, car vous et Xamarin êtes conscients des inconvénients.

Alors "sois intelligent".

2
Lex Li

J'ai vu une grande application Xamarin.iOS & Xamarin.Android conçue pour un grand détaillant de vêtements au Royaume-Uni avec un MVVM puissant utilisant très efficacement les classes Shared Library et Partial Classes. Seuls quelques scénarios très spécifiques nécessitaient l’utilisation des IFDEF. De cette expérience, je choisirais souvent cette voie par défaut.

Cela dit, il est bon de noter que la norme .NET 2.0 est à venir, ce qui fera probablement de ce débat une question moins courante car il apporte sa propre approche (similaire mais très différent de PCL) ... https: // blogs.msdn.Microsoft.com/dotnet/2016/09/26/introducing-net-standard/

0
Michael