В этом документе сравниваются два способа совместного использования кода в кросс-платформенных проектах: Общие проекты и Библиотеки переносимых классов, включая преимущества и недостатки каждого из них.
Обзор
Есть два альтернативных способа для совместного использования кода в кросс-платформенных приложениях:
- Shared Projects – Использование этого типа проекта общих ресурсов, для организации исходного кода предполагает применение директивы компилятора #if, чтобы удовлетворять специфичными для каждой платформы требованиям.
- Portable Class Libraries – Создают Библиотеку переносимых классов (PCL), предназначающуюся для платформ, которые Вы хотите поддерживать, и использовать Интерфейсы для обеспечения специфичной для платформы функциональности.
Целью стратегии совместного использования кода, показанной на этой диаграмме, является поддержка архитектуры, где один код может использоваться на различных платформах.
В этой статье сравниваются два метода, чтобы помочь вам выбрать правильный тип проекта для ваших приложений.
Shared Projects
Самый простой подход к совместному использованию файлов кода должен использовать Общий Проект (введенный в Xamarin Studio 5 и Visual Studio 2013 Update 2).
Этот скриншот показывает файлы решения, содержащий три прикладных проекта (для Android, iOS и Windows Phone), с Shared проектом, который содержит общие файлы исходного кода C#:
Концепция архитектуры представлена на следующей диаграмме, где каждый проект включает в себя все общие исходные файлы:
Пример
Это кроссплатформенное приложение, которое поддерживает iOS, Android и Windows Phone потребует проект приложения для каждой платформы. Общий код существует в общем проекте.
Решение примера содержит следующие папки и проекты (имена проектов были выбраны для выразительности, ваши проекты не обязаны следовать этим правилам именования):
- Shared – Общий проект, содержащий код, общий для всех проектов.
- AppAndroid – Xamarin.Android проект.
- AppiOS – Xamarin.iOS проект.
- AppWinPhone – Windows Phone проект.
Таким образом, проекты трех приложений используют один и тот же исходный код (C# файлы в Shared). Любые изменения в общем коде будет использоваться во всех трех проектах.
Преимущества
- Позволяет совместно использовать код в нескольких проектах..
- Общий код может быть разветвленным на основе разделения для каждой платформы с помощью директивы компилятора (например, с помощью #if __ANDROID__, как говорилось в документе Создание кросс-платформенных приложений).
- Проекты приложений могут включать в себя ссылки на специфические для каждой платформы ресурсы, которые может использовать общий код (например, использование Community.CsharpSqlite.WP7 в примере Tasky для Windows Phone).
Недостатки
- В отличие от большинства других типов проектов, общий проект не имеет «на выходе» assembly-код. Во время компиляции файлы рассматриваются как часть ссылающегося проекта и компилируются в DLL. Если вы хотите делиться своим кодом как DLL, то Portable Class Libraries является гораздо лучшим решением.
- Операции рефакторинга, которые затрагивают код внутри директивы компилятора «inactive» не будет обновлять код.
Примечания
Это хорошее решение для разработчиков приложений и создание кода, который предназначен только для совместного использования в своих приложениях (и не распространяется среди других разработчиков).
Portable Class Libraries
Portable Class Libraries — здесь более детально
Преимущества
- Позволяет совместно использовать код в нескольких проектах.
- Операции рефакторинга всегда обновлять все затронутые ссылки.
Недостатки
- Нельзя использовать директивы компилятора.
- Можно использовать только подмножество .NET Framework, определённое в выбранном профиле (см. Введение к PCL для получения дополнительной информации).
Примечания
Хорошее решение, если вы планируете передать результирующую сборку другим разработчиками.
Резюме
Portable Class Libraries — самый простой способ совместного использования кода на нескольких платформах, однако они имеют некоторые недостатки, в том числе установки PCL поддержки пользовательской конфигурации.
При стратегии совместного использования кода вы можете выбирать платформы, на которые вы ориентируетесь. Выберите метод, который лучше всего подходит для вашего проекта.
<= Создание кросс-платформенных приложений | Создание кросс-платформенных мобильных приложений – Обзор => |