2012-01-06 10 views
46

Esta pregunta se relaciona específicamente con una arquitectura recomendada y, iOS, aplicaciones de Android desarrollado de las personas experiencias previas para WP7 multiplataforma usando C#, Monotouch y Monodroid respectivamente. Investigué las preguntas anteriores here, here y here. Proporcionan buenas respuestas, pero no exactamente lo que estoy buscando. También encontré this excellent question que entra en el costo beneficio por lo que hay cierta superposición.Alguien tiene experiencia con la arquitectura de plataforma cruzada desarrollo móvil WP7 Android iOS (MonoTouch, MonoDroid, C#)

que tienen un requisito para desarrollar una multi-plataforma iPhone/iPad, WP7 y aplicación de Android para una compañía de la aptitud de la salud &, que se integrará con su página web. La aplicación requiere una pequeña cantidad de almacenamiento de datos local para el modo fuera de línea y la sincronización con el sitio web cuando hay una red disponible. Soy un desarrollador de Windows (C#/C++) de principio a fin y realmente no quiero ir por la ruta de tres aplicaciones de Objective C, Java y C#, aunque lo haré si es necesario. También operaré como líder tecnológico y trabajaré un poco para un equipo en este proyecto.

Me gustaría saber si alguien aquí tiene experiencia con el desarrollo multiplataforma usando Monotouch, Monodroid y WP7 y compartir su experiencia en la arquitectura de aplicaciones para reutilizar la mayor cantidad de código posible. La arquitectura que estoy considerando es el siguiente:

Proposed architecture for Wp7, Monotouch, Monodroid app

Mi pregunta es la siguiente:

  • Alguien ha intentado aquí algo como esto?
  • ¿Estos marcos (Monotouch, monodroid) valen la pena para este tipo de trabajo?
  • ¿Puedo configurar el proyecto completo en Visual Studio 2010 con proyectos separados (dlls/exe) para el destino Monotouch, Monodroid y Wp7 (pero código compartido usando 'Agregar como enlace')?
  • ¿Qué tipo de reutilización de código puedo esperar realísticamente con esta arquitectura (o una similar)? es decir, ¿qué estrategias/patrones puedo usar para volver a utilizar el acceso a los datos locales, los servicios web y la lógica comercial?

Saludos,

+44

me gusta el dibujo nube –

+0

Gracias, su don de marca registrada' ya sabes ;-) La nube que es, no el dibujo –

+1

Si estás actuando como arquitecto, ¿no tiene más sentido adoptar un enfoque que no esté limitado por tu propia experiencia técnica (C#/C++)? Como lo indican las preguntas que hace referencia a HTML/PhoneGap/JavaScript es un enfoque probado para resolver este problema. Por supuesto, no está exento de dificultades y el viaje no es fácil, pero ciertamente se puede y se ha hecho. Estoy interesado en las respuestas que puede recibir sin excepción. – ColinE

Respuesta

25

Es posible que desee ver en el proyecto Monocross que está diseñado para ayudarle a volver a utilizar el código de C# con múltiples capas de presentación:

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

Los autores de Monocross (ITR Movilidad) han creado varias plataformas móviles múltiples soluciones para una variedad de clientes y han escrito dos libros sobre el tema, uno es "iPad en la empresa" (http://amzn.to/zAhQK6) y el próximo "Desarrollo móvil multiplataforma con C#" (http://amzn.to/wM6RsF).

Mientras tanto, se puede ver la presentación de Scott Olson que lo hizo en Monoespaciado 2011, que describe cómo utilizar Monocross a ver en varias plataformas móviles y de escritorio a la vez la reutilización de la lógica de negocio:

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

Ellos imponer una estricta división de MVC en su código:

MonoCross MVC Pattern http://tirania.org/s/0e187c1c.png

El mayor beneficio de diseñar una aplicación con este modelo es que puede ejecutar la misma aplicación con interfaces de usuario nativas en cada plataforma. Obtiene iOS nativo, Android, interfaz de usuario de Windows e incluso tienen un front-end ASP.NET que le permite publicar versiones web de la misma lógica comercial.

Esta tecnología fue utilizada con éxito por la aplicación de ejemplo de Medtronic que se mostró por Apple en sus negocios IPAD:

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

le sugiero que también echa un vistazo a el blog de Scott donde él mensajes regularmente sobre sus experiencias con la cruz arquitectura de plataforma

+0

Oh sí. Parece mi marco (completo en mnet). Gracias por compartir, aprecia la información. –

+0

De hecho, estoy medio tentado de desmarcar la respuesta HTML5 y marcar esto como respuesta;) Lo siento Colin. Voy a hacer algo de viabilidad en ambos, pero prefiero la idea de una solución .NET completa. Dime, ¿el abvoe también funciona en Windows Phone? (Mencionas la IU de Windows, asumí que yo y el escritorio de Windows). Queremos publicar una versión WP7, Android, iPhone, iPad y ASP.NET (sitio web) de la misma aplicación. –

+1

Sí, lo anterior funciona con Windows Phone 7. También hemos estado agregando una API multiplataforma para servicios comunes: http://blog.xamarin.com/2011/11/22/introducing-the-xamarin-mobile-api / –

9

Sobre la base de sus comentarios son sus requisitos para una plataforma cruzada móvil que se integrará con sus servicios existentes, sino también trabajar sin conexión. Usted está específicamente interesado en C# a través de Mono, sin embargo, ha indicado que no está descartando otros enfoques.

Creo que HTML/PhoneGap/JavaScript es una ruta que debe explorar con cierto detalle. La versión WP7 de este framework acaba de ser lanzada, y he tenido experiencia de releasing an application to the marketplace usando este enfoque.

PhoneGap ajusta su código HTML/JavaScript, en el caso de WP7 esto se carga en el almacenamiento local. Esto permite que la aplicación funcione completamente fuera de línea. Esto es cierto para todas las versiones (iOS, Android, etc.)

Probablemente el mayor problema con PhoneGap/HTML5 es el mismo problema que tenemos cuando desarrollamos aplicaciones complejas basadas en web para el navegador. Las herramientas para JavaScript no son geniales y las diferencias de navegación son un problema constante. Sin embargo, es una solución probada.

Finalmente, es posible crear una interfaz de usuario de la aplicación que sea completamente diferente para cada plataforma. Al utilizar el patrón MVVM he logrado compartir toda mi lógica de negocio JavaScript entre las aplicaciones de WP7 y iOS, mientras que tener una interfaz de usuario totalmente diferente:

enter image description here

comparar esto con las pantallas WP7:

enter image description here

NOTA: planeo tener la versión de iOS de Property Finder en la AppStore en breve, ¡solo tengo que averiguar cómo usar PhoneGap Build!

+0

Estoy realmente impresionado con esto gracias. ¿Puedes comentar experiencias de rendimiento en iphone/ipad/wp7/android usando PhoneGap/HTML5? He escuchado en la vid que ios es lento como un perro cuando renderiza contenido HTML. –

+2

La situación es todo lo contrario, el navegador webkit utilizado en iOS es muy rápido (para un navegador móvil), con un buen soporte CSS3 y aceleración de hardware. Hace un tiempo creé un control de lista de salto HTML5. El rendimiento en un iPod Touch barato fue mejor que la versión WP7 Silverlight que he escrito. http://www.codeproject.com/KB/scripting/SilverlightToHTML5.aspx – ColinE

+0

gah, vale, me has convencido (aunque odio el javascript). Seguiré tu tutorial después de mis vacaciones la próxima semana :) Respecto a la cámara, ¿aún puedo acceder a esto? Es una característica pequeña, pero acabo de recordar que el cliente quiere que los usuarios tomen fotografías de antes y después de ellos mientras usan la aplicación. Supongo que se podría incorporar un botón de carga para seleccionar un archivo del disco local. –

1

La pregunta es muy difícil de responder, pero me gustaría compartir algunas ideas.

La situación con el desarrollo móvil es muy similar al desarrollo de la primera mitad de los 90. El teléfono tiene recursos limitados como tenían las computadoras, los sistemas operativos móviles están dando sus primeros pasos, por lo tanto, el ecosistema es relativamente pequeño. Tienen filosofía propia, herramientas e incluso idiomas. Y esto es algo bueno, pero conduce a un dolor de cabeza para el desarrollo multiplataforma. Como resultado, hay muchos intentos de aclarar esto un poco. La gente crea frameworks, wrappers, etc. que es una especie de abstracción y abstractions are leaky. Esto es extremadamente importante para los dispositivos móviles, no solo por el rendimiento como el número de ciclos de CPU, sino también por el rendimiento de la batería, que es mucho más importante para el usuario.

Si fuera usted, crearía aplicaciones en un entorno nativo, especialmente si tiene algunas consideraciones de rendimiento. El mejor soporte, herramientas, recursos educativos, etc. paga la lógica comercial duplicada. Con todo, no es un sistema operativo o de gestión de base de datos, la base de código no será enorme;)

Dicho eso. Con respecto a Monotouch y Monodroid, sería muy cuidadoso ya que Apple blocks iPhone OS apps created by many third-party compilers y The King realmente no se preocupan por los desarrolladores. El caso de que Mono se vacíe a la trabajadora por infracción de patente o proveedores de software propietario es muy probable. Esto es triste para mí porque C# es mi idioma favorito.

PS. No creo que HTML5 for mobile will take en el corto plazo.

+0

Una buena respuesta general, sin embargo, solo quiero señalar un problema con su afirmación "Apple bloquea las aplicaciones de iPhone OS creadas por muchos compiladores de terceros", este artículo está desactualizado. Apple ha cambiado su postura al respecto el año pasado. Puede encontrar numerosas aplicaciones PhoneGap (HTML5), aplicaciones Titanium (multiplataforma patentada), AppMobi y Mobile AIR (Adobe Flash/Flex) en la AppStore de Apple. ¡Los tiempos cambian! – ColinE

+0

@lukas gracias por la respuesta informativa. Aún no he tomado una decisión, pero la respuesta de Colin me dio algo en qué pensar. Estoy de acuerdo con su declaración sobre la madurez del teléfono y que el soporte nativo en cada SO puede ser un beneficio sobre "un marco hacky para gobernarlos a todos" (TM). Mi única preocupación sobre la división en tres bases de código es mantenerlos actualizados en sincronización. Con un pequeño equipo de desarrollo, tendremos que esforzarnos para hacer esto tal como es. Con 3x aplicaciones para mantenerlo podría ser imposible. Ahh! Si solo estuvieran aquí los días del desarrollador solo de Windows :) –

+0

@Lukas no sabe quién marcó su pregunta, pero personalmente la encontré muy útil. –

9

Simplemente añadiendo otra alternativa a la mezcla - mvvmcross

Este proyecto se desarrolló a partir de experiencias con monocross, mvvmlight y OpenNETCF.

Es un framework de mvvm bastante dogmático (¡con mis opiniones en él!), Incluye soporte de enlace de datos para Droid y Touch, y realmente fomenta la reutilización de código entre las plataformas.

La fuente está disponible desde https://github.com/slodge/MvvmCross, se ha utilizado en al menos un par de proyectos grandes y todavía está en desarrollo activo.

Hay una presentación introductoria sobre ella en Slideshare: http://www.slideshare.net/cirrious/dev-evening-monotouch-monodroid-mvvm-mvvmcross-and-databinding

Una de las muestras más con todas las funciones es una aplicación de conferencia:

sql bits app

Cuestiones relacionadas