Gwt Seminario JavaHispano ManoloCarrasco
Transcript of Gwt Seminario JavaHispano ManoloCarrasco
-
GWT, Google Web Toolkit
Manuel Carrasco MoinoSeminarios de JavaHispano (16-Abril-2010)[email protected]
-
Programa
Entendiendo GWT Qu es, y qu no es? Ventajas de usar un compilador frente a escribir javascript a mano Herramientas del toolkit. Soporte, Comunidad. Estructura de un Proyecto GWT.
Libreras y dependencias. GWT y Eclipse. Testing y Depuracin. El corazn de GWT: JSNI, Deferred Binding, RPC
Builders: Ant y Maven SEO y GWT Aplicaciones Complejas RIA, modelo MVP
Proyectos de Ejemplo:svn checkout http://gwt-workshop.googlecode.com/svn/trunk GwtWssvn checkout http://svn.apache.org/repos/asf/james/hupa/trunk hupa
-
Acerca de M Licenciado en Farmacia e Ingeniero de Telecomunicaciones. Enganchado a los sistemas desde 2002, y a Internet desde 2005 Experto en sistemas crticos, seguridad, redes y comunicaciones, empec a
apasionarme por el software hace 5 aos. Programador de cualquier cosa (asm, c, c++, shell, tcl-tk, dbase, vb,
javascript, perl, ruby, groovy, Java ...) Enamorado de Linux. Fantico de TDD y las filosofas giles. Aficionado al Opensource
Creador de proyectos como mcmWebmail, powerFax, Lxp, y libreras como gwtUpload, gwtChismes...
Contribuciones a jetty, apache, ruby, perl, icewm, webmin, linux, uucp, mgetty, postfix ...
Contribuidor de Gwt
Committer de Hudson (Performance, Emma, Spanish Translation)
Miembro de la Apache Software Foundation (James y Hupa). Pero... mi gran pasin es la msica folk (me podis llamar hortera :-)
He trabajado para Azkar, Intelligent Data, Cibernos, Lucent, Multiasistencia, COATM, mirai, Yell ....
Actualmente trabajo como Arquitecto de Sistemas y Sofware en Paradigma Tecnolgico.
-
Entendiendo GWTQu es, y qu no es?
-
Misin de GWT
To radically improvethe web experience for users
by enabling developersto use existing Java tools
to build no-compromise Ajaxfor any modern browser
Mejorar radicalmente la experiencia web de los usuarios al permitir a los desarrolladores utilizar las herramientas de Java para hacer Ajax (no comprometido), para cualquier navegador moderno.
-
Qu NO es GWT?
No es una librera ms con utiliades Javascript (jquery, prototype ...)
No es una librera de widgets (ext, scriptaculous, yui ...)
No es un framework (mootools, dojo ...) No es 'exclusivamente' un kit para crear
aplicaciones RIA.
-
Qu es GWT? Generador de javascript: convierte cdigo java a javascript.
Es un compilador
Es un linker
Es un optimizador completo (no slo compresin y ofuscacin)
Es un SDK
El cdigo generado puede incluirse en cualquier html (esttico o dinmico), y puede interaccionar con ste (modificar el DOM, ejecutando AJAX, validando forms ...).
Proprorciona adems un conjunto de herramientas para testear, depurar, etc ..
Proporciona un conjunto de mdulos cliente: DOM, XML, I18N, JSON, RPC, y Widgets bsicos.
Y... mucho mas (css sprite, image bundling ...)
Es cdigo java para la mquina virtual 'browser' en lugar de 'jre'
-
Ventajas de usar un compilador frente a escribir javascript a mano
-
ASM sustituido por C, C++, GJC ...Javascript sustituido por Java, ? ... Alto nivel: Java
-
Porqu un compilador?
Separar la mantenibilidad del cdigo de la efectividad del ejecutable.
El javascript escrito a mano tiene un conflicto de intereses:
Identificadores largos y legibles = aplicaciones grandes y lentas. Buen Formato = aplicaciones grandes y lentas. Comentarios = aplicaciones grandes y lentas
La solucin no es buscar convenciones en el cdigo javascript escrito a mano, es crear un nivel de separacin para que no se comprometan ambas (mantenibilidad, efectividad).
Muchos de los errores mas comunes (sintaxis, errores de tipadom etc) son fcilmente corregibles en tiempo de compilacin en lugar de en tiempo de ejecucin.
-
Porqu Java? La sintaxis javascript es ms prxima a java que en otros
lenguages, por lo que es mas facil la transformacin de java que de otros lenguages (perl, ruby, php ...).
Muchas herramientas Java para desarrollo. El chequeo de tipos de java incrementa la productividad
porque reduce errores. Asistencia en la escritura de cdigo. Refactoring de verdad. Diseo, patrones, OO, hacen mas fcil de comprender el
cdigo y las llamadas AJAX, con mucho menos documentacin.
Y... TDD
-
GWT nos facilita Versionado de ficheros (para cada compilacin) Slo lo necesario para cada navegador y lenguaje. Descarga slo lo que se usa. Eliminar cdigo no usado (slo las clases, y mtodos utilizados). Cdigo ofuscado, comprimido y optimizado. Los ficheros pueden ser cacheados para siempre. Ejecucin ms rpida pero con cdigo legible. Herramientas para Test y Debug. Libreras de lado servidor (RPC java) Mismos objetos Servidor Cliente Deja a GWT hacer las cosas que tenemos que hacer a mano, o que dejamos de
hacer por desconocimiento, complejidad, etc. Seleccin e inclusin de libreras en la pgina. Herramienas de optimizacin Herramientas de ofuscacin Versionado de ficheros para publicar. Mantenimiento de versiones legibles/ilegibles del cdigo. Configuracin http para enviar informacin de cach
-
Rendimiento? JavaScript
GWT genera cdigo mucho ms pequeo que el que podamos escribir a mano. A diferencia de las aplicaciones tradicionales en javascript, Gwt analiza tu cdigo e incluye exclusivamente lo necesario para cada navegador.
Pudiera no ser ms rpido, pero s mas eficaz Usuario
Las aplicaciones GWT son normalmente ms rpidas que las escritas a mano, y normalmente requieren menos trucos HTTP. Gwt elimina el uso envoltorios para funcionalidades incluidas nativamente en esa versin de navegador.
Desarrollo Con el ahorro del tiempo invertido en depurar los problemas en cada
navegador, puedes emplear mucho mas tiempo en la funcionalidad de tu aplicacin. La eficiencia en el desarrollo es la parte favorita en Gwt.
-
Herramientas del toolkit.
-
Componentes GWT Libreria emulada JRE:
java.util java.lang
GWT librera Core JSON, XML, RPC DOM, UI, I18N
Compiler, Optimizer, Linker Herramientas para desarrollo:
Scripts de utiliad: webAppCreator, i18nCreator
Testing library (GWTestCase, HtmlUnit) Customized App Server: Jetty/Tomcat Eclipse Plugin Browser plugin Speed Tracer (extensin para chrome)
-
Y qu ms? Historia de navegacin (Botn atras, adelante) ClientBundle: permite agrupar y manipular recursos en tiempo de compilacin
(Imgenes, Optimizacin de Css, Sprite, lenguages ) UIBinder: lenguage declarativo y extensivo para construir interfaces de usuario.
Injecta constructores en el cdigo Java, y genera HTML en tiempo de compilacin.
Code split: fragmenta el cdigo javascript en partes para que sean cargadas asncronamente.
LayoutPanels: comportamiento predecible de la disposicin de elementos. Compresin: Utiliza las mas avanzadas tcnicas de compresin conocidas. Gestor de Eventos y Schedule propios, sin memory leaks. JSNI (JavaScript Native Interface) SOYC (Story of your compile)
-
Soporte, Comunidad.
-
Actividad GWT Comunidad muy activa:
GWT-users cien mensajes diarios GWT-contributors (lista moderada) 10 mensajes diarios
Desarrollo Grupo de committers limitado Decenas de contributors Exhaustiva revisin de cdigo Tests muy exigentes Elevada calidad de cdigo (javadocs, codstyle ) Excelentes desarrolladores.
Documentacin Muy bien explicado Muy Actualizada
Cientos de libreras Google.
-
Estructura de un Proyecto GWT.
-
Estructura del proyecto
src/.../client: cdigo para el navegador
src/.../public: html, css, img ... src/.../server: cdigo para el
servidor [project].gwt.xml: configuracin test/.../client: tests de cliente test/.../server: tests java war/ cosas de despliegue
war/lib war/WEB-INF
-
Pasos para crear un proyecto
1. Crea un nuevo proyecto2. Configura el mdulo3. Crea tu pgina html y pon la llamada JS4. Desarrolla en java: cliente, servidor, RPC 5. No olvides Testear: GWTTestCase6. Prueba y depura: DevMode + Browser + Plugin7. Compila a JS8. Despliega 9. Olvidat de versionado, optimizacin,
obfuscacin, cach, refactoring, reusing ...
-
Crear el proyecto $ ~/gwt-current/webAppCreator -helpGoogle Web Toolkit 2.0.3WebAppCreator [-overwrite] [-ignore] [-out dir] [-junit pathToJUnitJar] moduleName
where -overwrite Overwrite any existing files -ignore Ignore any existing files; do not overwrite -out The directory to write output files into (defaults to current) -junit Specifies the path to your junit.jar (optional)and moduleName The name of the module to create (e.g. com.example.myapp.MyApp)
$ ~/gwt-current/webAppCreator \ -junit mylibs/junit-4.3.jar \ -overwrite \ -out Hello \ com.foo.HelloCreated directory Hello/srcCreated directory Hello/warCreated directory Hello/war/WEB-INF[]
-
Configurar el mdulo
-
Pgina html de la aplicacin
Hello
-
Trabajar en Java
- El mtodo EntryPoint se llama cuando la aplicacin se carga en el navegador
- GWT.create permite asociacin aplazada de clases 'deferred binding'
- La clase DOM sirve para manejar elementos de navegador
package com.foo.client;import [...]public class Hello implements EntryPoint { // This method is called whenever the browser loads the page public void onModuleLoad() { MyClass impl = GWT.create(MyClass.class); DOM.getElementById("id").getStyle().setProperty("display", "none"); }}
-
Qu obtenemos al Compilar?
## nico Fichero a incluir en el HTML## Se encarga de detectar browser/lang y cargar el fichero de aplicacion adecuado## No se debe cachearcom.foo.Hello.nocache.js## Cada fichero para la combinacin browser/language## Se pueden generar ficheros '.js' o '.html' dependiendo del linker ## cross-site (xs), standard (std)## Se puede cachear1102DEF681997CEB9DDF55DEA52DAC77.cache.js ( .html)35041D1CDE8A3F7BA84E28F014AD7763.cache.js855ACC0BD175268F9BFBDDD1AC46D60C.cache.jsBCAE487AACB322FA340C97DFE205CF9C.cache.jsEAB3A6766FC64B8FB876749E68EF311D.cache.js## Definicin de llamadas rpcDACD019E1AB65BD2BCAC2F7BD9DB85F2.gwt.rpc## Ficheros estticosclear.cache.gifHello.csshistory.htmlHello.cssHello.htmlimages/
-
Cmo es el JS generado?
### Compilando con el parmetro -style PRETTYfunction getStylePrimaryName(elem){ var fullClassName, spaceIdx; fullClassName = elem['className'] == null?null:String(elem['className']); spaceIdx = fullClassName.indexOf(fromCodePoint(32)); if (spaceIdx >= 0) { return fullClassName.substr(0, spaceIdx - 0); } return fullClassName;}
function removeStyleName_0(style){ setStyleName_0(this.getStyleElement(), style, false);}
### Por defecto -style OBFUSCATED_=gB.prototype=new zdb();_.gC=lB;_.tI=22;function tB(f,d){var a,b,c,e,g;for(b=0;b
-
Usar la cach de cliente
### Configuracin Apache para GWTExpiresActive onExpiresDefault "now plus 2 hours"
# Dont cache the main file (browser and locale detector, and application file selector)# ie: com.miraiespana.home.gwt.Home.nocache.js
ExpiresDefault "now plus 2 minutes" Header set Cache-Control "no-store,must-revalidate" AddOutputFilter DEFLATE
# Cache the application files# ie: 1102DEF681997CEB9DDF55DEA52DAC77.cache.js
ExpiresDefault "now plus 2 years" Header set Cache-Control "max-age=290304000,public"
-
Librer as y dependencias
-
Estructura de las libreras GWT
Crear un mdulo (normalmente sin entryPoint)
Crear cdigo Java
Aadir elementos estticos
Generar un fichero jar que incluya: Cdigo Fuente *.java
Elementos Pblicos (css, jpg ...)
Fichero de Mdulo *.gwt.xml
Clases compiladas *.class
META-INF/MANIFEST.MF
Conclusin: igual que en java Se puede utilizar maven
Se puede utilizar ant
-
Cmo se usan la Libreras GWT
Aadir el fichero .jar al classpath Heredar el mdulo de la librera en nuestro mdulo.
Incluir libreras que no se utilizan slo penaliza el tiempo de compilacin, porque todo el cdigo no usado ser descartado de nuestro javascript final.
## Hello.gwt.xml [ ]
[ ]
-
GWT y Eclipse
-
Plugin de google para eclipse El plugin incluye:
Asistente para creacin de proyectos. Servidor y Lanzador de aplicaciones Lanzador de Tests SDK para GWT SDK para GAE
Web oficial: http:http://code.google.com/eclipse/
-
Plugin para Navegadores Para depurar y trabajar en modo desarrollo es necesario aadir a nuestro
navegador el plugin para GWT Existen plugins para:
FF Chrome IE
Cmo funciona? GWT compila la aplicacin a javascript aadiendo cierta informacin de
control. Se utiliza un canal de comunicacin entre el plugin del browser y el
modo de desarrollo de GWT (integrado en eclipse) Eclipse interacciona con el usuario mostrando las lneas de cdigo y con
el navegador y respetando los puntos de control
-
Importar un proyecto a Eclipse File Import Existing projects into workspace Browse
-
Aadirlo al plugin GWT Properties Google Web Toolkit Use GWT
-
Verificar 'Build Path' Properties Java Build Path Add Library
(aadir GWT SDK y eliminar gwt*jar)
-
Ejecutar en modo desarrollo Borrar ficheros *.launch (ya no son necesarios con el plugin) Run As Web Application Abrir la URL indicada en el Navegador (si no tiene el plugin preguntar).
-
Testing y Depuraci n
-
Ejecutar tests (de Cliente JS) Dos modos de ejecucin:
Desarrollo Se compila la aplicacin para HtmlUnit Se ejecuta HtmlUnit y Jetty Run As GWT Junit Test
Produccin Se compila la aplicacin para el browser por defecto Se ejecuta automticamente el navegador y Jetty Run As GWT Junit Test (Production Mode)
-
Otros modos de Test de cliente El resto de modos de Test requieren realizar algunas operaciones en eclipse: Lanzar el test en modo junit
Run As Junit Test El test fallar porque le falta aadir al classpath los directorios de fuentes
Run Run Configurations HelloTest ClassPath User Entries Advanced Add Folders (src y test)
Probar el test que debe pasar Aadir las opciones que deseemos:
Run Run Configurations HelloTest xArgument VMArgumentsNota: poner las siguientes opciones entre comillas dobles
Manual -Dgwt.args=-runStyle Manual:1
Selenium -Dgwt.args=-runStyle Selenium:myhost:4444/*firefox
BrowserManagerServer -Dgwt.args=-runStyle RemoteWeb:rmi://myhost/ie8 java -cp gwt-user.jar;gwt-dev.jar \ com.google.gwt.junit.remote.BrowserManagerServer \ ie8 "C:\Program Files\Internet Explorer\IEXPLORE.EXE"
-
Depurar
La depuracin de aplicaciones GWT (cliente) es exactamente igual que para cualquier otra aplicacin java:
Poner puntos de control Debug As (Web Application | GWT Junit Test | GWT Junit Test
(Production Mode) Conectar el browser Utilizar la vista de depuracin
Se puede mezclar depuracin del lado cliente con lado servidor. Al igual que depurando aplicaciones grficas, la depuracin contina cuando
ocurre un evento.
Recomendacin: NO depurar hacer TDD
-
El coraz n de GWT:JSNI
Deferred BindingAjax
-
JSNI (JavaScript Native Interface)
Cdigo Javascript en comentarios java Permite utilizar Js dentro de GWT y al revs. Usa la declaracin 'native' que indica a java que
ese mtodo se resolver en tiempo de 'runtime'
Los mtodos nativos se puede utilizar en los IDEs sin que marquen el cdigo con error.
El compilador GWT lo detecta y lo copia en el fichero javascript resultante
Finalmente se comprime y obfusca junto con el resto de cdigo
-
JSNI## En este ejemplo exportamos un mtodo creado en GWT y lo dejamos disponible en el objeto Window
public class HelloClass implements EntryPoint{
String prefix = "Hello: ";
// Al cargar la aplicacion, exportamos el metodo public void onModuleLoad() { exportHelloMethod(this); } // Metodo que queremos usar desde javascript public String helloMethod(String name) { return prefix + " " + name; } // JSNI: ponemos nuestro mtodo en el objeto window private native void exportHelloMethod(HelloClass instance) /*-{ $wnd.hello = function(name) { return [email protected]::helloMethod(Ljava/lang/String;) (name); }; }-*/;}
-
Deferred Binding
Son clases java que no se utilizan hasta el momento de compilacin
Se seleccionan diferentes implementaciones para cada navegador, lenguage
Hace posible el emulador JRE de GWT Elimina el cdigo innecesario para cada
plataforma. Es el principal responsable del rendimiento del
cdigo JS generado por GWT
-
Deferred Binding# El modo de establecer la opacidad es diferente en IE y en otros navegadoresclass DOM { private static CSSImpl cssImpl = GWT.create(CSSImpl.class); public void cssClearOpacity(Element e) { cssImpl.cssClearOpacity(e.getStyle(); } public native void cssSetOpacity(Element e, double value) { cssImpl.cssSetOpacity(e.getStyle(), value; }}
class CSSImpl { public void cssClearOpacity(Style style) { style.setProperty("opacity", ""); } public native void cssSetOpacity(Style style, double value) { style.setProperty("opacity", String.ValueOf(value); }}
class CSSImplIE extends CSSImpl{ @Override public native void cssClearOpacity(Style style) /*-{ style.filter = ''; }-*/; @Override public native void cssSetOpacity(Style style, double value) /*-{ style.filter = 'alpha(opacity=' + (value * 100) + ')'; }-*/;}
-
AJAX, RPC
GWT puede hacer llamadas Ajax de 4 tipos XML JSON TEXT o HTML RPC
RPC es un contrato entre servidor (java) y cliente. Se pasan objetos (pojo) que se puedan serializar.
No todos los objetos serializables en JRE son serializables Tienen que ser compatibles con la emulacin JRE de GWT.
En el servidor hay que extender RemoteServiceServlet Realmente se transfieren objetos jSON especiales que ambos
extremos saben convertir en su propia representacin de objeto
-
RPC// Interfaces necesarios (Se ponen en la parte cliente)@RemoteServiceRelativePath ("greet")public interface GreetingService extends RemoteService {String greetServer(String name) throws IllegalArgumentException;}
public interface GreetingServiceAsync {void greetServer(String input, AsyncCallback callback)throws IllegalArgumentException;}
//Codigoclientepublic class Hello implements EntryPoint {private final GreetingServiceAsync greetingService = GWT.create(GreetingService.class);
greetingService .greetServer(textToServer, new AsyncCallback() {public void onFailure(Throwable caught) {}public void onSuccess(String result) {}});}
//Codigoenelservidorpublic class GreetingServiceImpl extends RemoteServiceServlet implements GreetingService {public String greetServer(String input) throws IllegalArgumentException {}}
greetServlet ws.server.GreetingServiceImpl greetServlet /hello/greet
-
Builders: Ant y Maven
-
Ant Los proyectos GWT para 'ant' se crean con la herramienta
webAppCreator Se genera un fichero build.xml con las tareas de:
Ejecutar Tests test.dev (HtmlUnit) test.prod (Browser)
Ejecutar en Modo desarrollo devmode
Compilar las clases java javac javac.tests
Compilar el cdigo java a javascript gwtc
Producir el fichero de la aplicacin empaquetado war
-
Maven Aunque hay varios plugins para maven, se debe usar el alojado en codehaus
http://mojo.codehaus.org/gwt-maven-plugin/. Se necesita maven 2.2.x para que funcione. Existe un arquetipo para crear un proyecto GWT:
mvn archetype:generate -DarchetypeGroupId=org.codehaus.mojo \ -DarchetypeArtifactId=gwt-maven-plugin -DarchetypeVersion=1.1 \ -DgroupId=ws -DartifactId=GwtWsHelloWorld
Despus editar el fichero pom.xml y hacer estas modificaciones2.0.3[...]
org.codehaus.mojo gwt-maven-plugin myGroupId.Application/Application.html prepare-package compile
-
Maven Goles:
'mvn gwt:run' ejecutar el modo desarrollo 'mvn gwt:compile' compilar a javascript
El resto de goles Gwt no funcionan o no son necesarios A partir de ahora podemos utilizar maven como en cualquier otro
proyecto java: 'mvn clean test package emma:emma site'
Nota: la instrumentalizacin de cobertura para tests GWT slo funciona con Emma.
Importar el proyecto en eclipse como un proyecto maven con el plugin m2eclipse de sonatype
-
Inportar proyecto maven en eclipse Importar el proyecto maven:
File Import Maven projects. Aadir al proyecto el SDK de GWT Especificar la ubicacin del directorio web:
Properties Web Application This project has a WAR directory src/main/webapp Mark Launch from this
Borrar index.html Crear index.html con el plugin GWT
New (G) HTML page index.html ws.Application
-
SEO y GWT
-
SEO- GWT produce javascript con capacidades muy avanzadas de manejar el DOM
y de ejecutar Ajax.
- Podemos modificar el comportamiento de una pgina utilizando javascript (progressive enhancement).
- Podemos reaprovechar el cdigo de una funcionaliad aadida en una parte de nuestra aplicacin en cualquier otra.
- Gquery, es un clon de jquery para Gwt. - La versin 0.2-patched es funcional y estable (1.6.x). http://gwt-workshop.googlecode.com/svn/trunk/lib/gwtquery-0.2-patched.jar
- La versin 0.1-SNAPSHOT-patched es funcional (2.0.x), pero la parte de efectos es inestable, aunque los selectores y eventos funcionan bien.
http://gwt-workshop.googlecode.com/svn/trunk/lib/gwtquery-1.0-patched-SNAPSHOT.jar
- Parte del cdigo de Gquery estar en el core de GWT (selectores Css)
-
GQuery$("div.outer > div").css("position", "relative"). dblclick(new Function() {public boolean f(Event e) {$("div.outer > div").as(Effects).animate("left: '+=100'").animate("top: '+=100'").animate("left: '-=100'").animate("top: '-=100'"); }});
$(".note").click(lazy().fadeOut().done());$(".note").append(" Hello");$("div > div"). css("color", "blue"). hover( lazy(). css("color", "red"). done(), lazy(). css("color", "blue"). Done() );
$(".w").before("Click me ..."). as(Effects).fadeIn();
$(".w").css($$("border: 'thin double red', padding: '10px', width: '50%', backgroundColor: 'green', position: 'relative'" ));
$("button").click(doEffect);
-
Creando libreras Js con GWT- Los objetos, mtodos y variables creados con GWT se pasan a JS,
pero el compilador obfusca estos nombres aleatoriamente de manera que es imposible referenciarlos desde javascript.
- GwtExporter permite exportar las clases y mtodos que queramos con nombres conocidos en tiempo de compilacin
- Leer el tutorial:http://code.google.com/p/gwtchismes/wiki/Tutorial_ExportingGwtLib
rariesToJavascript_es
-
Aplicaciones Complejas RIA, modelo MVP
-
MVC (Modelo vista controlador)
Struts, JFace, Spring mvc, ASP, Grails, ROR, etc Vista no testeable (o dificil) Desarrollo lento Vinculos complejos
Muy acoplado Dependencias cruzadas
-
MVP (Modelo Vista Presentador)
Swing, awt, swt, echo2, vaadin, gwt ... Vista Testeable unitariamente. TDD pero desarrollo lento. Vinculos muy sencillos: 1 1
Objetivo: Crear una vista simple Testabilidad de la vista no es necesaria
porque utilizamos componentes testados.
Se pueden crear Mock muy simples Desarrollo Rapido con TDD
-
MVP + EventBus + Patron Comando
Muy desacoplado Dependencias muy simples
-
Resumiendo: Qu es MVP?
MVP patrn derivado de MVC que ayuda a separar mucho la vista La clave es una estricta regulacin de la interaccin entre la vista y el
presentador La vista y el modelo de datos estan separados a travs de un contrato
(interface) MVP es una mejora de MVC basado en:
La vista no conoce al modelo. El presentador es independiente de la tecnologa de interfaz de
usuario. La vista y el presentador son testeables independientemente
-
MVP + Gwt, la clave: el presentador
Componente encargado de presentar las acciones del usuario al sistema y obtener la respuesta.
Acta de la siguiente manera: Recibe datos de la vista Convierte los datos de la vista en acciones que se ejecutan contra el sistema Con la respuesta del sistema, actualiza los datos de la vista. La navegacin a otra vista, debern ser delegadas en el presentador, que
sabr de historia, caches, etc. Se ejecuta en el navegador, pero es testeable en la JVM. Es la clave del desarrollo gil en Gwt Libreras disponibles:
Gwt-Gin inyeccion en parte cliente Gwt-presenter para el presentador, historia, eventbus Gwt-dispatch para el modelo comando (cliente/servidor
presentador/modelo)
-
MVP, Consideraciones
El patrn MVP, no puede ser implementado sin haber hecho un anlisis previo que determine que miembros deben formar parte del contrato de cada vista.
Una vez que tenemos claro el contrato que debe implementar cada vista, podemos desarrollar la lgica de presentacin de forma paralela al diseo grfico.
El patrn MVP puede ser caro de implementar en aplicaciones relativamente sencillas, pero es muy til en grandes aplicaciones.
-
MVP explicacin de clases y mtodos:
EventBus: addEvent(type, action), fireEvent(type, data)
Dispatcher: execute(action(request), callback(response))
XXPresenter, XXDisplay onBind, revealDisplay
XXEventHandler, XXEvent XXAction, XXResult XXActionHandler
-
Conclusiones
-
GWT no hace posible nada que no fuera posible hacer de otra manera, pero s hace que la accin sea mucho mas productiva.
GWT no intenta ensalzar las virtudes de Java, sino reconocer el pragmatismo de las herramientas existentes, IDEs, entornos de prueba, tipos, etc.
GWT no quiere hacernos olvidar DOM, CSS, navegador, etc, sino permitir escribir abstracciones de todo ello y hacernos mas productivos que escribiendo cdigo JS a mano.
Posiblemente, algn da GWT ser capaz de compilar otros lenguages, o incluso procesar JS con anotaciones de tipos.
GWT hace productivo y posible el desarrollo de sitios webs de gran escala y abre la posibilidad de crear aplicaciones de nueva generacin de manera fiable.
Ray Cromwell
-
Manuel Carrasco Mo inohttp://manolocarrasco.blogspot.com
twitter.com/[email protected]
Preguntas
Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46Slide 47Slide 48Slide 49Slide 50Slide 51Slide 52Slide 53Slide 54Slide 55Slide 56Slide 57Slide 58Slide 59Slide 60Slide 61Slide 62Slide 63Slide 64Slide 65Slide 66Slide 67Slide 68Slide 69