Intereting Posts
Android Google Map – маркер Clicked открывает новую активность или большее окно Отставание от задержки инициализации двигателя TTS Engine в Android Множественный шрифт Не работает вовремя в приложении Разработка приложения в режиме киоска в android Есть ли способ иметь URL-адреса и телефонные номера WebView в Android? Тестирование с элементами пользовательского интерфейса в Android-представлении Передача данных с USB (плодовитый) на устройство Android Можно ли программно удалить пакет на Android? Лучший способ защитить данные, чувствительные к приложениям Android? Как распечатать изображение на Bluetooth-принтере в Android? Удаление неиспользуемых импортов в Android Studio Фатальный сигнал 11 (SIGSEGV) при 0x00000000 (код = 1), поток 32140 Вложенные предпочтения.xml BottomSheetDialog остается скрытым после увольнения путем перетаскивания Поиск инструмента для создания графического файла с 9 патчами

Xamarin Shared Projects vs Портативные библиотеки классов

Я пытаюсь выяснить, какой из них лучше всего подходит для нашего проекта.

Библиотека PCL или общий проект от Xamarin.

В документации по документации Xamarin здесь говорится, что эмпирическое правило заключается в том, чтобы выбрать общий проект, когда мы не будем делиться библиотекой. Общий проект можно записать с помощью # if, чтобы убедиться, что он работает с несколькими платформами – это также вызывает некоторые проблемы с рефакторингом #ifs неактивны.

Тем не менее у меня есть ощущение, что неправильно вводить этот код в общий класс. Если код, который должен быть доступен для мобильных платформ Windows, Android и IOS, использует общий проект вместо PCL – это означает, что мы используем #if внутри совместно используемого проекта вместо написания кода конкретной платформы в конкретном проекте платформы.

Это пытается поддерживать элементы non PCL с помощью #ifs и сделать общий код более сложным и сложным в обслуживании. Разве это не должно быть сделано Xamarin для улучшения .NET PCL-кода?

А также это означает, что мы размещаем определенные функции платформы в общем проекте, а не конкретном проекте платформы, т. Е. Скрываем сложность конкретной платформы от самого проекта платформы, что кажется неправильным с точки зрения архитектуры.

Я прав (в этом случае я противоречу документации Xamarin), или я что-то упускаю?

Solutions Collecting From Web of "Xamarin Shared Projects vs Портативные библиотеки классов"

Оба имеют свое место. Например, вы могли бы поместить интерфейс в PCL, а затем реализовать его в совместном коде, если бы реализация имела бы приличное количество общего кода.

Мне тоже не нравятся флагов компилятора, я бы предпочел использовать частичные классы. Таким образом вы можете избежать большинства или даже всех флагов компилятора. Class1.cs пойдет в общий проект, а остальные будут входить в свои проекты на платформе.

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

У них обоих есть свое место. Если ваш код полностью переносится, я бы рекомендовал использовать PCL. Если вам нужно использовать специфичные для платформы API-интерфейсы, то вы можете сделать это с помощью PCL с использованием различных методов (как правило, для создания переносимой абстракции для функциональности), но если это изолированный случай, то проще просто использовать #if.

Полный список плюсов и минусов см. В моем ответе на вопрос о PCL и связанных файлах . Общие проекты аналогичны связанным файлам, но не имеют некоторых недостатков в инструментах.

Мое впечатление, что они перечислили директивы компилятора в разделе «Преимущества общих библиотек», просто потому, что это была функция, которую PCL не поддерживает.

Вы не должны относиться к этому как к поощрению от Xamarin, так как вы и Хамарин осознаете недостатки.

Так что «будь умным».

Я видел большое приложение Xamarin.iOS и Xamarin.Android, разработанное для крупного розничного продавца одежды в Великобритании с сильным MVVM с использованием общей библиотеки и частичных классов. Только пара очень специфических сценариев, где нам нужно было использовать IFDEF. Из этого опыта я часто отправлялся по этому маршруту по умолчанию.

Сказав это, хорошо заметить, что наступает стандарт .NET 2.0, который, вероятно, сделает этот дискуссию менее распространенным вопросом, поскольку он привносит свой собственный подход (похожий, но очень сильно отличающийся от PCL) … https: // blogs. msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/