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