Любой имеет опыт работы с архитектурой для кроссплатформенной мобильной разработки под WP7 Android iOS (monotouch, monodroid, C #) - PullRequest
47 голосов
/ 06 января 2012

Этот вопрос конкретно относится к рекомендуемой архитектуре и предыдущему опыту пользователей для кросс-платформенных приложений WP7, iOS, Android, разработанных с использованием C #, Monotouch и Monodroid соответственно.Я исследовал предыдущие вопросы здесь , здесь и здесь .Они дают хорошие ответы, но не совсем то, что я ищу.Я также нашел этот превосходный вопрос , который приводит к выгоде с точки зрения затрат, поэтому есть некоторое совпадение.

У меня есть требование разработать кроссплатформенный iPhone /iPad, WP7 и Android-приложение для компании, занимающейся вопросами здоровья и фитнеса, которое будет интегрировано с их веб-сайтом.Приложение требует небольшого объема локального хранилища данных для автономного режима и синхронизации с веб-сайтом, когда сеть доступна.Я разработчик для Windows (C # / C ++) насквозь и не очень хочу идти по пути трех приложений Objective C, Java и C #, хотя я это сделаю, если придется.Я также буду работать в качестве технического лидера и отработать некоторую работу для команды над этим проектом.

Я хотел бы знать, есть ли у кого-нибудь здесь опыт кросс-платформенной разработки с использованием Monotouch, Monodroid и WP7 и поделитьсяих опыт в архитектуре приложений для повторного использования как можно большего количества кода.Я рассматриваю следующую архитектуру:

Proposed architecture for Wp7, Monotouch, Monodroid app

У меня такой вопрос:

  • Кто-нибудь здесь пробовал что-товот так?
  • Стоят ли эти фреймворки (Monotouch, monodroid) за такую ​​работу?
  • Можно ли настроить весь проект в Visual Studio 2010 с отдельными проектами (dll / exe) для цели Monotouch, Monodroid и Wp7 (но с общим кодом, используя «Добавить как ссылку»)?
  • Какой вид повторного использования кода я могу реально ожидать с этой (или подобной) архитектурой?т.е. какие стратегии / шаблоны я могу использовать для повторного использования локального доступа к данным, веб-сервисов и бизнес-логики?

С уважением,

Ответы [ 4 ]

25 голосов
/ 08 января 2012

Возможно, вы захотите взглянуть на проект MonoCross, который призван помочь вам повторно использовать код C # с несколькими уровнями представления:

http://code.google.com/p/monocross/

Авторы MonoCross (ITR Mobility) имеютсоздал несколько мобильных кроссплатформенных решений для различных клиентов и написал две книги по этой теме: «iPad на предприятии» (http://amzn.to/zAhQK6) и предстоящая «Кроссплатформенная разработка для мобильных устройств на C #» ()http://amzn.to/wM6RsF).

Тем временем вы можете посмотреть презентацию Скотта Олсона, которую он сделал на Monospace 2011, в которой рассказывается, как использовать MonoCross для одновременной работы с несколькими мобильными и настольными платформами с повторным использованием бизнес-логики:

http://www.infoq.com/presentations/The-Rise-of-Mono-in-the-Enterprise

Они применяют строгое разделение MVC в своем коде:

Шаблон MonoCross MVC http://tirania.org/s/0e187c1c.png

Самым большим преимуществом разработки приложения с этой моделью является то, что вы можете запуститьодно и то же приложение с собственными пользовательскими интерфейсами на каждой платформе. Вы получаете встроенные интерфейсы iOS, Android, Windows и дажеиметь интерфейс ASP.NET, позволяющий публиковать веб-версии с одной и той же бизнес-логикой.

Эта технология была успешно использована образцом приложения Medtronic, которое Apple продемонстрировала в своем бизнесе iPad:

http://www.apple.com/ipad/business/profiles/medtronic/

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

9 голосов
/ 19 апреля 2012

Просто добавив еще одну альтернативу к миксу - mvvmcross

Этот проект был разработан на основе опыта работы с monocross, mvvmlight и opennetcf.

Это довольно самоуверенный фреймворк mvvm (с моим мнениемэто!), он включает в себя поддержку привязки данных для Droid и Touch, и он действительно поощряет повторное использование кода между платформами.

Источник доступен с https://github.com/slodge/MvvmCross,, он использовался по крайней мере впара крупных проектов, и они все еще находятся в активной разработке.

На слайд-шоу есть вводная презентация: http://www.slideshare.net/cirrious/dev-evening-monotouch-monodroid-mvvm-mvvmcross-and-databinding

Один из наиболее полнофункциональных примеров - приложение для конференций:

sql bits app

9 голосов
/ 06 января 2012

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

Я чувствую, что HTML / PhoneGap / JavaScript - это маршрут, который вы должны изучить более подробно. Версия этого фреймворка для WP7 была только что выпущена, и у меня был опыт выпуска приложения на рынок с использованием этого подхода.

PhoneGap упаковывает ваш код HTML / JavaScript, в случае WP7 он загружается в локальное хранилище. Это позволяет приложению работать полностью в автономном режиме. Это верно для всех версий (iOS, Android и т. Д.)

Вероятно, самая большая проблема с PhoneGap / HTML5 - это та же проблема, что и у нас при разработке сложных веб-приложений для браузера. Инструменты для JavaScript невелики, и различия между браузерами являются постоянной проблемой. Тем не менее, это проверенное решение.

Наконец, можно создать пользовательский интерфейс приложения, который будет совершенно разным для каждой платформы. Используя шаблон MVVM, мне удалось разделить всю мою бизнес-логику JavaScript между приложениями WP7 и iOS, имея совершенно другой пользовательский интерфейс:

enter image description here

Сравните это с экранами WP7:

enter image description here

ПРИМЕЧАНИЕ. В ближайшее время я планирую добавить в AppStore версию Property Finder для iOS, мне просто нужно разобраться, как использовать PhoneGap Build!

1 голос
/ 06 января 2012

На вопрос очень сложно ответить, но я хотел бы поделиться некоторыми мыслями.

Ситуация с мобильной разработкой очень похожа на разработку в первой половине 90-х годов. Телефон имеет ограниченные ресурсы, как и компьютеры, мобильные операционные системы делают свои первые шаги, поэтому экосистема относительно мала. У них своя философия, инструменты и даже языки. И это хорошо, но приводит к головной боли для кроссплатформенной разработки. В результате, есть много попыток прояснить это немного. Люди строят фреймворки, обертки и т. Д., Что является своего рода абстракцией, а абстракции утечки . Это чрезвычайно важно для мобильных устройств не только по производительности в виде числа циклов ЦП, но и по производительности батареи, что гораздо важнее для пользователя.

На вашем месте я бы создавал приложения в родной среде, особенно если у вас есть некоторые соображения по поводу производительности. Лучшая поддержка, инструменты, образовательные ресурсы и т. Д. Платит за дублированную бизнес-логику. В общем, это не ОС или система управления базами данных, кодовая база не будет огромной;)

Это, как говорится. Что касается Monotouch и Monodroid, я был бы очень осторожен, поскольку Apple блокирует приложения для iPhone OS, созданные многими сторонними компиляторами и King на самом деле не заботится о разработчиках. Весьма вероятен случай, когда моно будет сброшено на работу из-за нарушения патентных прав или проприетарного программного обеспечения. Это грустно для меня, потому что C # - мой любимый язык.

PS. Я не верю, что HTML5 для мобильных устройств займет в ближайшее время.

...