Arquitectura de una aplicación web JavaScript de una sola página?


¿Cómo debe estructurarse una aplicación web JS compleja de una sola página en el lado del cliente? Específicamente, tengo curiosidad sobre cómo estructurar limpiamente la aplicación en términos de sus objetos de modelo, componentes de interfaz de usuario, controladores y objetos que manejan la persistencia del servidor.

MVC parecía un ataque al principio. Pero con componentes de interfaz de usuario anidados en varias profundidades (cada uno con su propia forma de actuar / reaccionar a los datos del modelo, y cada uno generando eventos que ellos mismos pueden o no manejar directamente), no parece que MVC se puede aplicar limpiamente. (Pero por favor corríjame si ese no es el caso.)

--

(Esta pregunta dio lugar a dos sugerencias de usar ajax, que obviamente es necesario para cualquier cosa que no sea la aplicación de una página más trivial.)

Author: Community, 2010-06-16

14 answers

La arquitectura MVC de PureMVC/JS es la OMI más elegante. Aprendí mucho de él. También encontré Scalable JavaScript Application Architecture de Nicholas Zakas útil en la investigación de opciones de arquitectura del lado del cliente.

Otros Dos consejos

  1. He encontrado que la vista, el enfoque y la administración de entradas son áreas que necesitan atención especial en las aplicaciones web de una sola página
  2. También me pareció útil abstraer la biblioteca JS, dejando la puerta abierta para cambiar de opinión sobre lo que usa, o mezclar y combinar en caso de necesidad.
 35
Author: Dean Burge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-02 18:24:28

La presentación de Nicholas Zakas compartida por Dean es un muy buen lugar para comenzar. Yo también estaba luchando para responder a la misma pregunta por un tiempo. Después de hacer un par de productos Javascript a gran escala, pensó en compartir los aprendizajes como una arquitectura de referencia en caso de que alguien lo necesite. Echa un vistazo a:

Http://boilerplatejs.org/

Se ocupa de las preocupaciones comunes de desarrollo de Javascript, tales como:

  • Estructuración de soluciones
  • Creando complejo jerarquía de módulos
  • Componentes de interfaz de usuario autocontenidos
  • Comunicación entre módulos basada en eventos
  • Enrutamiento, Historial, Marcadores
  • Pruebas unitarias
  • Localización
  • Generación de documentos

Etc.

 13
Author: Hasith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-05 17:12:44

La forma en que compilo aplicaciones:

  • Marco ExtJS, aplicación de una sola página, cada componente definido en un archivo JS separado, cargado bajo demanda
  • Cada componente contacta con su propio servicio web dedicado (a veces más de uno), obteniendo datos en almacenes ExtJS o estructuras de datos de propósito especial
  • El renderizado utiliza componentes ExtJS estándar, por lo que puedo enlazar almacenes a cuadrículas, cargar formularios desde registros, ...

Simplemente elija un marco de javascript y siga su mejor practicar. Mis favoritos son ExtJS y GWT, pero YMMV.

NO ruede su propia solución para esto. El esfuerzo requerido para duplicar lo que hacen los marcos javascript modernos es demasiado grande. Siempre es más rápido adaptar algo existente que construirlo todo desde cero.

 10
Author: Joeri Sebrechts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-16 13:12:47
Question - What makes an application complex ? 

Respuesta - el uso de La palabra "complejo" en la pregunta misma. Por lo tanto, una tendencia común será buscar una solución compleja desde el principio.

Question - What does the word complex means ?

Respuesta - Cualquier cosa que sea desconocida o parcialmente comprendida. Ejemplo: La teoría de la Gravedad aún hoy es COMPLEJA para mí, pero no para Sir Isaac Newton, quien la descubrió en 1655.

Question - What tools can I use to deal with complexity ?

Respuesta - Comprensión y simplicidad.

Question - But I understand my application . Its still complex ?

Respuesta-Piénsalo dos veces, porque la comprensión y la complejidad no co-existen. Si usted entiende una enorme enorme aplicación, estoy seguro de que estará de acuerdo en que no es más que una integración de unidades pequeñas y simples.

Question - Why all of the above philosophical discussion for a question on 
           Single Page Application (SAP)?

Respuesta-Porque,

-> SPA no es un tipo de tecnología central recién inventada para la que necesitamos reinventar la rueda para muchas cosas que estamos haciendo en el desarrollo de aplicaciones.

- > Es un concepto impulsado por la necesidad de un mejor rendimiento, disponibilidad, escalabilidad y mantenibilidad de la web aplicación.

-> Es un patrón de diseño bastante recientemente identificado, por lo que una comprensión de SPA como un patrón de diseño va mucho camino en la toma de decisiones informadas sobre la arquitectura de un SPA.

- > A nivel de raíz ningún SPA es complejo, porque después de entender las necesidades de una aplicación y el patrón de SPA, se dará cuenta de que todavía está creando una aplicación, más o menos de la misma manera que lo hacía antes con algunas modificaciones y reorganizaciones en el desarrollo enfoque.

Question - What about the use of Frameworks ?

Answer - Frameworks son código de placa de caldera / solución para algunos patrones comúnmente identificados y genéricos, por lo tanto, pueden quitar x% (variable, basado en la aplicación) de carga de desarrollo de aplicaciones, pero entonces no se debe esperar mucho de ellos, especialmente para aplicaciones pesadas y en crecimiento. Siempre es un buen caso para tener el control completo de la estructura y el flujo de su aplicación, pero lo más importante es el código para ella. No debe haber áreas grises o negras en el código de aplicación.

Question - Can you suggest one of the many approaches to SPA architecture ?

Respuesta - Piense en su propio marco basado en la naturaleza de su aplicación. Categorice los componentes de la aplicación. Busque un marco existente que esté cerca de su marco derivado, si lo encuentra y luego lo usa, si no lo encuentra, le sugiero que siga adelante con el suyo propio. Crear un marco es un gran esfuerzo por adelantado, pero produce mejores resultados a largo plazo. Algunos componentes básicos en mi marco de SPA serán:

  • Fuente De Datos : Modelos / Colecciones de Modelos

  • Marcado para la presentación de datos: Plantillas

  • Interacción con la aplicación : Eventos

  • Captura de estado y navegación : Enrutamiento

  • Utilidades, widgets y plug-ins : bibliotecas

Hágame saber si esto ayudó de alguna manera y buena suerte con la arquitectura de su SPA !!

 8
Author: Prakash Tiwari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-28 21:53:24

Lo mejor que puedes hacer es mirar ejemplos de uso de otros frameworks:

TodoMVC muestra muchos muchos marcos de SPA.

 4
Author: Adam Gent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-18 17:52:27

Puede utilizar javascript MVC framework http://javascriptmvc.com /

 1
Author: bjornd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-16 06:53:04

La aplicación web en la que estoy trabajando actualmente usa jQuery y no la recomendaría para ninguna aplicación web de una sola página grande. La mayoría de los frameworks, es decir, Dojo, yahoo, google y otros utilizan espacios de nombres en sus bibliotecas, pero jQuery no lo hace y esto es un inconveniente significativo.

Si su sitio web está destinado a ser pequeño, entonces jQuery estaría bien, pero si tiene la intención de construir un sitio grande, le recomendaría mirar todos los marcos de Javascript disponibles y decidir cuál uno que más satisfaga sus necesidades.

Y yo recomendaría aplicar el patrón MVC a su javascript/html y probablemente la mayor parte de su modelo de objetos para el javascript podría hacerse como el json que realmente devuelve desde el servidor a través de ajax y el javascirpt utiliza el json para representar html.

Recomendaría leer el libro Ajax en acción, ya que cubre la mayoría de las cosas que necesitará saber.

 1
Author: eaglestorm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-17 02:08:21

Estoy usando Samm.js en varias aplicaciones de una página con gran éxito

 1
Author: NicoGranelli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-08 20:38:47

Yo iría con jQuery MVC

 0
Author: Reigel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-16 05:27:35

Echa un vistazo http://bennadel.com/projects/cormvc-jquery-framework.htm Ben es bastante agudo y si usted cavar alrededor en su blog que tiene algunos mensajes agradables acerca de cómo CorMVC se pone juntos y por qué.

 0
Author: patrickmcgraw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-16 05:33:31

Alternativa: echa un vistazo a ItsNat

Piense en JavaScript pero codifique lo mismo en Java en servidor con las mismas API de DOM, en servidor es mucho más fácil administrar su aplicación sin cliente/puentes personalizados porque la interfaz de usuario y los datos están juntos.

 0
Author: jmarranz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-06 09:01:44
 0
Author: cody,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-13 13:19:05

NikaFramework le permite crear una aplicación de una sola página. También permite escribir HTML, CSS (SASS), JavaScript en archivos separados y juntarlos en sólo un archivo de salida en la final.

 0
Author: Alex Ivasyuv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-08 18:06:05

Recomendaría explorar Yeoman. Le permite utilizar las "mejores prácticas" existentes para su nuevo proyecto.

Por ejemplo:

Si decide utilizar Angular.js, hay un Yeoman generator , que te da una estructura para enrutamiento, vistas, servicios, etc. También le permiten probar, minificar su código, etc.

Si decide utilizar Backbone, checkout este generador

 0
Author: Daniel Pérez Rada,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-08 01:14:08