У любого есть опыт работы с архитектурой для кросс-платформенной платформы WP7 для Android iOS для мобильных устройств (monotouch, monodroid, С#)

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

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

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

Proposed architecture for Wp7, Monotouch, Monodroid app

Мой вопрос таков:

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

С уважением,

Ответ 1

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

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

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

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

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

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

MonoCross MVC Pattern
(источник: tirania.org)

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

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

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

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

Ответ 2

Основываясь на ваших комментариях, ваши требования касаются кросс-мобильной платформы, которая будет интегрироваться со своими существующими службами, но также работать в автономном режиме. Вы особенно заинтересованы в С# через 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

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

Ответ 3

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

Этот проект был разработан благодаря опыту с монокристами, 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

Ответ 4

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

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

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

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

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