2015-11-30 6 views
0

Je travaille sur un projet GWT et suis un peu confus. C'est un projet serveur/client. Je gère le json avec Autobean. Autobean doit utiliser des interfaces pour fonctionner. Je n'ai pas tellement travaillé avec des interfaces et j'ai besoin d'aide. Voici comment le code Autobean:GWT (modèle) interface/classe

interface User { 
     int id(); 
     void setId(int id); 
     String getUsername(); 
     void setUsername(String username); 
    } 

interface Result{ 
    List<User> getUsers(); 
    void setUsers(List<User> users); 
} 


interface Beanery extends AutoBeanFactory{ 
     AutoBean<User> makeBean(); 
     AutoBean<Result> makeBeans(); 
     } 

Pour convertir le json à la liste, je le fais.

AutoBean<Result> autoBeanCloneAB = AutoBeanCodex.decode(beanFactory, Result.class, "{\"users\": " + json + "}"); 
List<User> users = autoBeanCloneAB.as().getUsers(); 

je rencontre aussi une classe d'utilisateurs, et je ne suis pas sûr si cela est nécessaire ou comment je devrais être la manipulation de ce. Dans tous mes projets précédents, je n'ai travaillé qu'avec des classes de modèles et non avec des interfaces. J'ai essayé de lire et semble comprendre le concept d'une interface, mais dans ce cas je ne vois aucune raison d'utiliser la classe User quand j'ai l'interface utilisateur. Quelle est la bonne approche? Y a-t-il une raison d'utiliser la classe User, et si oui, veuillez expliquer.

Comme d'habitude. Toute l'aide est appréciée

Répondre

1

L'interface est nécessaire si vous utilisez un proxy qui est la base d'Autobean. Cela fonctionne très bien comme modèle java proxy. L'interface sera en fait un proxy à l'implémentation concrète sans avoir à compiler l'implémentation concrète. Dans les révisions précédentes de GWT, le mécanisme rpc était utilisé, ce qui créait un problème car les classes côté serveur devaient être compatibles à 100% avec GWT et sérialisables pour être compilées. L'implémentation AutoBean et GWT de RequestFactory contourne cela en créant simplement un "DTO" depuis votre interface pendant la compilation. Cela vous permet d'invoquer des méthodes getter/setter sur l'implémentation concrète sans que l'implémentation concrète soit compilée par gwt. Vous pouvez simplement effectuer un transfert d'état du côté serveur vers le client via json et les méthodes getter/setter seront invoquées sur le proxy côté client (implémentation de l'interface générée). L'interface ressemble à un surcoût mais elle est nécessaire pour faire abstraction du code dans les classes secondaires du serveur par exemple.

Je vous recommande de regarder dans gwt requestfactory car il cache/gère une grande partie de la plaque de cuisson Autobean pour vous. Vous pouvez créer un Bean en utilisant RequestFactory et encore le convertir en json en utilisant la classe ProxyUtils (si je me souviens bien). Ensuite, créez simplement une interface et annotez-la avec le @ProxyFor (concreteImplementation.class). Le compilateur va générer tout le code nécessaire pour vous et vous n'avez pas à jouer avec les interfaces de création AutoBeanFactory et autres.

Espérons que cela aide.

P.S.

L'autre option consiste à utiliser l'interface native de jsni, mais avec quelques subtiles nuances.

+0

Merci. Cela effacé pense. Je pense que je vais rester avec mon Autobean et son interface – MDK