2011-07-30 9 views
10

Actualmente me encuentro con un problema bastante desafiante relacionado con la división de códigos GWT y esperaba algo de ayuda.Mejor código GWT Diseño dividido para encapsular "módulos"

Actualmente trabajo en una gran aplicación GWT heredada (días anteriores a MVP) y estoy buscando dividir el código de esta aplicación en función de los módulos que los "portlets" (lo que llamamos los diversos widgets compuestos que construimos nuestras páginas arriba con) son parte de.

Actualmente, nuestros módulos solo se identifican por el paquete en el que se encuadra el portlet, pero estoy abierto a cambiar esto para adaptarlo mejor a un diseño de división de códigos genérico y sólido.

Cualquier idea sobre cómo puedo diseñar este código para indicar que un portlet/composite pertenece a un "módulo" específico y luego dividir el código para que la primera vez que se carga cualquier portlet/composite dentro del módulo X, todo el módulo X está cargado?

Gracias

+0

¿Sigues teniendo problemas?+1 por motivación :) –

+0

jaja no he tenido tiempo de analizarlo desde que dejé @Nico pero está por venir, así que pensé en hacer la pregunta tanto tiempo :) – brent777

Respuesta

1

Hmm ... normalmente, es bastante simple, pero supongo que eso no es su verdadero problema ...

Sólo tiene que utilizar esto:

GWT.runAsync(new RunAsyncCallback() { 
    public void onFailure(Throwable reason) { 
     ... 
    } 
    public void onSuccess() { 
     ... 
    } 
}); 

Todo dentro del método se onSuccess luego se divide en otro archivo javascript que luego se cargará a pedido.

En caso de que desee separar materiales compuestos del resto de su código, simplemente coloque la creación de su material compuesto dentro de este método onSuccess.

También puede anidar métodos GWT.runAsync, por lo que puede dividir la pieza nuevamente en diferentes partes, p. primero GWT.runAsync carga el módulo X, en el constructor del módulo X puede hacer otro runAsync que luego carga su composición.

De couse, podría haber algunas dependencias entre la parte que hacen que sea difícil para el compilador para dividir pero he probado con uno de mis proyectos (alrededor de 40 mil líneas de código) y funcionó como un encanto.

+1

gracias por la respuesta, pero sé cómo usarla división de código, buscaba más un patrón de diseño para dividir módulos completos sin agregar la devolución de llamada asíncrona para cada compuesto (básicamente una variación de los patrones que el equipo de GWT ha publicado) – brent777

0

Packagaing tiene poco que ver con la división de código, el principal factor que hace que la división de código funcione es el pequeño enredo de espagueti entre las clases. Si una clase requiere otra y así sucesivamente, que eventualmente alcanza y atrapa todas las clases, la división del código no puede dividir las cosas en muchas, porque el solo acto de requerir la primera significa que todo es requerido. Si separa sus preocupaciones, también conocido como acoplamiento libre, entonces debería poder tener algo que sea adecuado para ser divisible.

+1

gracias por la respuesta, pero ya estoy consciente de todo lo que has mencionado Como dije en mi pregunta, actualmente nuestros módulos están divididos puramente por paquete, pero estoy abierto a cambiar eso (ya que sé que no tiene nada que ver con la división de códigos). Lo que estoy pidiendo es una forma de agrupar varios compuestos en un "módulo" del lado del cliente y obtener algún tipo de clase de "administrador" que sea lo suficientemente inteligente como para cargar un módulo completo cuando se usa cualquier compuesto de ese módulo. Quiero evitar escribir estas devoluciones de llamada asíncronas para todos y cada uno de los compuestos. – brent777

0

¿Qué le parece usar GWTP? Es un buen marco de MVP y le proporcionan la división de código automática. Debería reorganizar su base de código para usar un presentador/vista para cada uno de los módulos que desea dividir. A continuación, añadir codesplitting es tan simple como añadir las siguientes líneas a su presentador:

@ProxyCodeSplit 
@NameToken("firstpage") 
public interface MyProxy extends ProxyPlace<FirstPagePresenter> {} 

GWTP también tiene un plugin de Eclipse que genera la mayor parte del código repetitivo.

+0

Ojalá pudiéramos hacer eso, desafortunadamente nuestro sistema es bastante "largo de dientes" y está bastante vinculado a un marco de código abierto que uno de nuestros arquitectos escribió llamado gwt-portlets. Es un sistema masivo que tomaría más tiempo de lo que tenemos en este momento para refactorizarlo en un diseño tipo MVP. Sin embargo, echaré un vistazo a esto y si resulta factible para nosotros, entonces aceptaré su respuesta. – brent777

+0

No tiene que volver a configurar su base de código para MVP, solo sus contenedores de nivel superior. Digamos que su aplicación está dividida en cinco secciones diferentes, usted tendría un presentador/vista de nivel superior que contiene las 5 secciones, cada una refactorizada como presentador/vista. Cada sección aún podría contener portlets de gwt, no es necesario refactorizar los portlets para beneficiarse de la división del código. –

+0

mmmm ... eso podría funcionar para nosotros, dedicaré algo de tiempo a hacer una prueba de concepto basada en ese diseño y, si funciona, aceptaré su respuesta. Muchas gracias por la sugerencia. – brent777

Cuestiones relacionadas