it-swarm.com.de

Xamarin Shared Projects vs. Portable Klassenbibliotheken

Ich versuche herauszufinden, was der beste Weg für unser Projekt ist. 

PCL-Bibliothek oder gemeinsames Projekt von Xamarin. 

Im Xamarin-Dokumentationslink hier heißt es, dass es eine Faustregel ist, ein freigegebenes Projekt zu wählen, wenn die Bibliothek nicht freigegeben wird. Das gemeinsam genutzte Projekt kann mit # if geschrieben werden, um sicherzustellen, dass es mit mehreren Plattformen funktioniert. Dies führt auch zu Problemen mit der Umgestaltung von #ifs, die nicht aktiv sind.

Ich habe jedoch das Gefühl, dass es nicht richtig ist, diesen Code einer gemeinsamen Klasse zu unterziehen. Wenn ein Code, der für Windows, Android und IOS Mobile-Plattformen verfügbar sein soll, ein freigegebenes Projekt anstelle von PCL verwendet, bedeutet dies, dass wir #ifs innerhalb eines freigegebenen Projekts verwenden, anstatt plattformspezifischen Code in eine Plattform zu schreiben bestimmtes Projekt. 

Dadurch wird versucht, Nicht-PCL-Elemente über #ifs zu unterstützen, und der gemeinsam genutzte Code wird komplexer und schwieriger zu verwalten. Sollte dies nicht die Arbeit von Xamarin sein, um die .NET PCL-Codebase zu verbessern? 

Dies bedeutet auch, dass wir plattformspezifische Funktionen in das gemeinsame Projekt einbinden und nicht das plattformspezifische Projekt - d. H. Die Komplexität für eine bestimmte Plattform vor dem Plattformprojekt selbst verbergen - was sich architektonisch falsch anfühlt.

Habe ich recht (in diesem Fall widerspreche ich der Dokumentation von Xamarin) oder fehlt mir etwas?

24
user3141326

Beide haben ihren Platz. Zum Beispiel könnten Sie eine Schnittstelle in eine PCL einfügen und dann in gemeinsamem Code implementieren, wenn die Implementierung eine anständige Menge an gemeinsamem Code hätte.

Ich mag auch keine Compiler-Flags, ich würde lieber Teilklassen verwenden. Auf diese Weise können Sie die Mehrheit oder sogar alle Compiler-Flags vermeiden. Class1.cs würden in ein gemeinsames Projekt einsteigen und der Rest würde in ihre plattformspezifischen Projekte gehen.

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

Sie haben beide ihren Platz. Wenn Ihr Code vollständig portierbar ist, empfehle ich die Verwendung einer PCL. Wenn Sie plattformspezifische APIs verwenden müssen, können Sie dies mit einer PCL mit verschiedenen Techniken tun (in der Regel wird eine tragbare Abstraktion für die Funktionalität erstellt). Wenn es sich jedoch um einen Einzelfall handelt, ist es einfacher, ein #if zu verwenden.

Eine allgemeine Liste der Vor- und Nachteile finden Sie in meiner Antwort auf eine Frage zu PCLs und verknüpften Dateien . Freigegebene Projekte ähneln verknüpften Dateien, weisen jedoch keine Nachteile für die Tools auf.

6
Daniel Plaisted

Mein Eindruck ist, dass sie Compiler-Direktiven unter Vorteile von gemeinsam genutzten Bibliotheken aufgelistet haben, einfach weil diese Funktion von PCL nicht unterstützt wird. 

Sie sollten dies nicht als Ermutigung von Xamarin betrachten, da sowohl Sie als auch Xamarin die Nachteile kennen.

Also "sei klug".

2
Lex Li

Ich habe eine große Xamarin.iOS & Xamarin.Android-App gesehen, die für einen großen britischen Bekleidungshändler mit starker MVVM-Funktion erstellt wurde, die Shared Library und Partial Classes sehr effektiv verwendet. Nur ein paar sehr spezifische Szenarien, in denen IFDEFs verwendet werden mussten. Aus dieser Erfahrung heraus würde ich oft diese Route standardmäßig gehen.

Allerdings ist es gut zu wissen, dass der .NET-Standard 2.0 kommt, der diese Debatte wahrscheinlich weniger zu einer allgemeinen Frage machen wird, da sie einen eigenen Ansatz bringt (ähnlich, aber sehr verschieden von PCL) ... https: // blogs.msdn.Microsoft.com/dotnet/2016/09/26/introducing-net-standard/

0
Michael