Ориентация/разработка для нескольких мобильных платформ с одним языком программирования (С#)? Затрат и выгод?

Сегодня можно использовать программирование на С# для нескольких мобильных платформ, таких как:

(не стесняйтесь редактировать, если я пропустил некоторые) Конечно, это все еще программирование для пользовательского интерфейса, но основные библиотеки приложения могут быть разделены.

Мы все можем поблагодарить команду, собравшуюся вокруг Mono проекта и супергероя Мигеля де Икаса усилия бесценны.

Что меня беспокоит, каковы преимущества этих вариантов? Стоит ли поддерживать одно приложение на нескольких мобильных платформах меньше препятствий, а затем заказывать каждую библиотеку отдельно для повышения производительности. Кривая обучения каждого языка? Будучи Джеком всех профессий против .NET Ninja

Или зная, что двоичные файлы приложения, запрограммированные в родной среде, имеют меньший размер, возможно, даже оптимизированы лучше и не забывают, что вам нужно ждать поддержки новых обновлений os платформы.

ОБНОВЛЕНИЕ. Очевидно, есть еще одна вещь, которую нужно учитывать, и это поддержка. Поскольку Novell приобретается компанией Attachmate Group, вся команда Mono уволена. Однако основной член команды, возглавляемый Мигелем Де Икасой основал новую компанию Xamarin, которая будет изобретать Mono Мобильные инструменты разработки с нуля.

Ответ 1

По моему мнению, большой профессионал использования одной единственной среды (например, С#/. NET) является переносимость кода. И классные вещи, такие как LINQ, когда вы привыкнете к этому, вы не можете жить без него. Тем не менее, несколько мобильных ОС (iOS, Android, WP7) сильно отличаются от UI.

И, если я не ошибаюсь в отношении вашего приложения, он получил справедливую долю взаимодействий пользовательского интерфейса, если он должен запускаться на мобильном устройстве. Большинство мобильных приложений похожи на 80% UI-код.

Таким образом, вы все равно напишите отдельный набор кода пользовательского интерфейса для каждой платформы - например, вы будете писать в Silverlight WP7 (и во всей полноте WPF), вы будете писать совершенно разные набор кода для iOS в Cocoa (IB, Views, контроллеры и прочее), вы будете писать еще совершенно другой набор кода для Android.

Мой опыт всегда заключался в том, что для написания хорошего кода пользовательского интерфейса на любой платформе требуется большой опыт - например, обучение WPF/SL - это уже кошмар, который, вбрасывая Cocoa Touch и весь беспорядок в Android. Конечно, вы можете написать три набора пользовательских интерфейсов, которые выглядят и чувствуют достаточно схожими, но, скорее всего, вы будете так стараться повторно использовать код и иметь общие структуры данных, которые ваш пользовательский интерфейс будет в конечном итоге ниже по сравнению с выделенными приложениями - - и в этом мире мобильных приложений сегодня, не-супер (не говоря уже о подпараллельном) опыте пользовательского интерфейса означает смерть для вашего приложения.

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

Самое большее, что вы собираетесь использовать повторно, - это серверные модули. Механизмы принятия решений, процедуры поиска, управление данными и т.д. И даже это будет проблематично, потому что вы будете вынуждены иметь компромиссы в своих структурах данных, чтобы упростить интеграцию с тремя различными наборами кода пользовательского интерфейса, работающими на трех разных парадигмах интерфейса., Например, вы используете DependencyObjects для использования для привязки к представлениям Silverlight в модели MVVM? Если вы это сделаете, это не сработает с моделью Cocoa MVC, и вам придется закодировать эти привязки отдельно.

И так как не все мобильные среды позволяют вам использовать полный набор функций, например, MonoTouch для iOS не имеет общих конструкций, которые невозможно определить во время компиляции. Вы, по сути, используете очень небольшое подмножество .NET(и должны постоянно напоминать себе, какую функциональность можно использовать там), чтобы вы могли запускать их на трех разных платформах без значительных изменений.

Теперь изображение, имеющее все эти ограничения, когда вы пишете для платформы WP7, которая поддерживает весь набор функций .NET. Я не знаю о вас, но сойду с ума. И ваше приложение WP7 никогда не будет близко к тому, чтобы быть конкурентоспособным с другими приложениями там.

По-моему, боль и компромиссы не стоят того. В итоге вы получите три приложения so-so, которым не понравится ни одна из платформ.

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

Ответ 2

Самое большое преимущество для меня - возможность повторного использования бизнес-логики и кода связи между мобильными платформами. Да, я должен писать UI снова и снова, и это занимает время, чтобы обдумать это, но по крайней мере моя базовая платформа повторно используется.

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

Ответ 3

Поскольку принятый ответ был написан в 2011 году, появилось несколько различных фреймворков, которые привносят шаблоны MVC и MVVM в Mono для Android и MonoTouch, что помогает довольно много при разработке приложений для этих целей.

Для MVC проверьте проект под названием MonoCross

Для MVVM проверьте Stuart Lodge MvvmCross

В последнем содержится много кода для открытия изображений на трех платформах, составления электронных писем, открытия веб-браузеров, воспроизведения звуков и многого другого. Он также обрабатывает навигацию между ViewModels.

Ответ 4

Большое преимущество - это, конечно, многократное использование библиотек кода/класса на всех платформах. Имея это в виду, вы сможете быстрее переносить/разрабатывать приложения, что в свою очередь снижает затраты.

Кроме того, из-за повторного использования кода это сократит расходы на обслуживание.

Ответ 5

Существуют определенные недостатки в библиотеках Monotouch/Droid. Существует небольшое снижение скорости (около 5%, поэтому в большинстве случаев они не учитываются).

По моему опыту размер не сильно отличается. Значительная часть размера находится в ресурсах (ресурсы данных, упакованные изображения и тому подобное - не использование процессора), и большинство приложений не несут в себе столько ресурсов (из-за времени загрузки и доступности много настроек по умолчанию на мобильных платформах).

Я не думаю, что вы должны использовать рамки в играх. У меня нет большого опыта в разработке мобильных игр, но довольно разные рамки, которые вы используете в разработке игр (XNA, Android NDK..) и потребность в системных ресурсах (использование процессора, память и т.д.) Делают их довольно бесполезными IMHO.

Ответ 6

Преимущества:

  • Код на одном языке и (в основном) на каждой платформе.
  • Сокращение времени разработки
  • Дешевле

Недостатки:

  • Включение необходимых библиотек значительно увеличивает минимальный размер приложения - если приложение будет большим, разница не столь значительна.
  • Накладные расходы на производительность

Если у вас есть деньги и люди, всегда лучше, чтобы некоторые люди сосредоточились на iPhone и Objective-C, на некоторых Android и Java и т.д. Таким образом, у ваших программистов будет глубокое знание платформы, на которую вы нацеливаетесь, и быть в состоянии убедиться, что ваше приложение полностью использует возможности платформы - приложение не должно быть точно таким же (кроме, возможно, игр) на всех платформах, вам нужно играть в свои сильные и слабые стороны: приложение для iPhone должно выглядеть и функционировать как приложение для iPhone и т.д.

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

Ответ 7

Еще один способ взглянуть на это - вы можете легко переносить существующее приложение .NET/С# на множество мобильных клиентов (как родных, так и не родных) с помощью WebORB. На стороне клиента вам нужно будет закодировать либо на родном языке, либо вы можете создать приложение Adobe AIR, которое достаточно переносимо для разных мобильных ОС, таких как iOS, Android и BlackBerry PlayBook.

Ответ 8

Кросс-платформенное решение работает только в том случае, если ваше приложение является простым и понятным. Если вам требуются сложные функции, такие как локальное хранилище данных со сложными графами объектов, пойдите в native или ожидайте потратить месяцы для отладки проблем.