2010-06-13 8 views
7

Estoy a punto de comenzar a desarrollar un sistema a gran escala y estoy luchando con qué dirección proceder. He hecho bastantes aplicaciones web Java antes y tengo mucha experiencia con contenedores servlet y GWT y algo de experiencia con Spring. El problema es que la mayoría de mis aplicaciones han sido creadas solo para ser una prueba de concepto y con lo que estoy luchando es qué conjunto de marcos usar. Necesito tener tanto una aplicación basada en navegador como un servicio web diseñado para admitir el acceso desde dispositivos móviles (Android e iPhone por ahora). Idealmente, me gustaría diseñar este sistema de tal manera que no termine reescribiendo todos mis servlets para cada cliente (navegador y teléfono) aunque no me importa tener algunos pequeños controles allí para formatear correctamente el datos.Sugerencias para diseñar aplicaciones de Java a gran escala desde cero

Además, aunque ahora soy el único desarrollador, ese no será necesariamente el caso en el futuro y me gustaría diseñar algo que se adapte bien tanto con respecto al tráfico como a la cantidad de desarrolladores (isn ' solo una pesadilla para mantener).

Entonces, donde estoy ahora planea usar GWT para diseñar la interfaz basada en navegador, pero estoy luchando con la forma de reutilizar ese código para presentar la interfaz (muy probablemente xml) para los dispositivos móviles. Creo que con GWT RPC sería relativamente fácil hacer todo el AJAX en el navegador, pero podría dificultar la generación de XML para los teléfonos móviles. Además, me gusta la idea de usar algo como Hibernate para la persistencia y Spring Security para asegurar todo. Una vez más, no estoy seguro de qué tan bien cooperarán con GWT (creo que Hibernate debería estar bien ...)

Obviamente, hay mucho más que he presentado aquí, pero he tratado de dar usted el resumen de 5 minutos. Estoy un poco perplejo y me preguntaba si alguien de la comunidad tenía alguna experiencia empezando en este lugar. ¿Tiene sentido lo que intento hacer? ¿Es realista? No tengo dudas de que puedo hacer que todos estos marcos de trabajo hablen el mismo idioma, solo me pregunto si vale la pena el tiempo para luchar con ellos. Además, ¿me falta un marco que sería realmente beneficioso?

Gracias de antemano y lo siento por la relativamente amplia cuestión ...

Chris

+0

No cierre esto, es una pregunta válida sobre qué puntos considerar antes de comenzar a diseñar un proyecto grande. –

Respuesta

3

Voy a ser muy específica aquí ya que tengo un poco de experiencia relacionada. No se aplicará todo lo que escribiré, pero espero que algo lo haga.

Mi 1. consejo sería mantener cualquier código que dependa directamente de cualquier marco como "estúpido" como sea posible. Si puede, considere que dicho código es más o menos desechable (en lo que respecta a la implementación, los contratos de API expuestos a los clientes deben ser estables, por supuesto).

Enfóquese en lo que hace que su aplicación sea única, y trate de hacerlo independiente de GWT, etc. El facade pattern es algo que puedo recomendar: mantener la lógica específica de la aplicación detrás de una y exponerla cableando la capa de presentación con la que ha servido nosotros también. Si su back-end depende de una infraestructura de terceros (a través de servicios web, etc.), desacople esas dependencias de su código con el adapter pattern.

He pasado la mayor parte de mi tiempo de trabajo durante los últimos 5 años en la construcción de algo que coincida con lo que describió de muchas maneras. Hoy es más un marco de aplicación que una aplicación: tiene algunas interfaces de navegador diferentes (WAP/web estándar + ajax/aplicación de Facebook), una interfaz para el uso de SMS bidireccional y una interfaz REST/XML para clientes móviles gruesos - BREW , iPhone, Android y Blackberry.

En cuanto a los marcos, para persistencia, hemos utilizado Hibernate. Todos los diferentes códigos se unen con Spring. Las interfaces del navegador se han portado desde Struts (1.x) a Wicket. Las interfaces de SMS y cliente móvil se construyen sobre Restlet.

El uso de múltiples frameworks de capas de presentación diferentes (como Wicket y Restlet en nuestro caso) no ha sido un problema, siempre y cuando el código se mantenga reducido y las reglas comerciales se mantengan fuera de él (en la medida de lo posible). No hay nada que diga que la interfaz de su navegador debe estar empaquetada en la misma GUERRA que su interfaz de cliente móvil: con Spring, puede conectar fácilmente varias aplicaciones web con la misma fachada. Esto ha sido útil para nosotros, especialmente al permitir que varios desarrolladores trabajen en piezas bien aisladas de la aplicación.

En mi opinión, tratar de lograr la reutilización máxima de código en la capa de presentación ha causado más daño que bien. Esa ha sido siempre la parte más volátil de nuestra aplicación, más allá de lo que hemos podido esperar.

+0

Gracias por su respuesta en profundidad. Creo que has hecho algunas sugerencias realmente geniales que me ayudarán mucho. Sinceramente aprecio tu experiencia! –

Cuestiones relacionadas