french english

RSS 1.0 
 
 Login 
 Password 
 Créer un compte 
 
20-09-09 / 00:49 : Ext JS 3.0 / CP2JavaWS & Direct2CP (cjed)
La RC2 de Ext JS 3.0, dévoilée le 3 juin (soit juste un jour après la version 0.7 de CP2JavaWS qui apportait la gestion d'accès remote bufferisé, asynchrone et automatique pour les TableView) propose un mode CRUD proche du mode Direct2CP de CP2JavaWS (présenté le 14 juillet et finalisé le 2 août - je n'avais pas connaissance des nouveautés d'Ext JS à ce moment). On précise pour Ext JS des objets Reader (désérialisation - mapping JSON vers champs), Writer (pour la sérialisation - mapping champs vers JSON) et Store (url des services pour la lecture, création, modification et suppression). On peut voir des exemples ici et (RESTFul store), et des exemples plus simples sans backend serveur (Dynamic Form et binding depuis fichier xml local). Sur l'objet Proxy on peut également fixer une plage d'index (autoLoad), qui permet un accès bufferisé (Buffer Grid).

L'architecture d'Ext JS procure une bonne séparation et permet une customisation avancée du rendu et du fonctionnement des vues master et détail. Cependant CP2JavaWS possède les avantages suivants :

- une seule ligne de code côté client pour afficher une vue master/detail avec gestion CRUD complète (voir ici le code nécessaire avec Ext JS), accès bufferisé asynchrone automatique, tri, éléments du formulaire (detail view) dépendant du type de la propriété (comme les Dynamic Form de ExtJS). Il suffit de préciser le nom de la classe CP business. Toutes les fonctionnalités d'Ext Js sont disponibles dans un composant unique, qui permet le même niveau de customisation : colonnes affichées dans la master table, detail view custom, remote service custom pour les méthodes CRUD (si on ne veut pas passer par le service remote DAO générique fourni).
- fournit un service DAO remote ne nécessitant aucun paramétrage ni aucun code, qui travaille au niveau objet et gère les accès complets à la base (via Hibernate) - simulation de base en session dans RESTful Store de ExtJS -, donc utilisable immédiatement pour un backend Java.
- permet d'utiliser une couche de services applicatifs/métiers existante (via Spring ou un autre container) car fonctionne au niveau objet, et sans configuration additionnelle.
- gère des objets complets (graphes complexes) côté client et serveur : on peut ainsi afficher et éditer n'importe quelle propriété imbriquée, en spécifiant son path depuis l'objet business root, et la detail view générique affiche automatiquement des champs d'édition pour les attributs des sous-objets. La prochaine version de CP2JavaWS permettra de préciser (restreindre) les propriétés à éditer dans la vue détail générique (comme c'est déjà le cas pour la table view) - pour l'instant soit toutes les propriétés de l'arbre sont éditables, soit on passe une detail view custom (qui doit donc gérer la création des contrôles).
- permet de choisir entre clé technique et clé fonctionnelle (et multiple) sans nécessiter de code additionnel. Le masquage des champs id selon le mode et la position dans le cycle sont automatiques, ainsi que l'affectation du nouvel identifiant.
- gère la récupération des couples valeur/libellé pour les combo lists et groupes de boutons radios (via service remote ou données locales).
- choisit automatiquement le contrôle adéquat entre combo list et boutons radio.
- complètement gratuit (une licence de 329$ par développeur est requise pour Ext JS).

Enfin CP2JavaWS gère l'authentification Digest (Basic uniquement dans Ext JS), le switch automatique vers JSONP si nécessaire, et le maintient du jsession id par endpoint.

Note : le support de l'édition in-table (modification d'une ligne directement dans la vue table au lieu d'une detail view), présente dans Ext JS, sera intégré prochainement dans la CPTableView de Cappuccino. En effet il s'agit d'une fonctionnalité historique du composant NSTableView de Next/Cocoa (la méthode delegate se trouve déjà dans le code source de CPTableView, commentée pour le moment). De même manière la gestion du réagencement des colonnes est prévue.

Ext GWT 2.0 (disponible depuis le 9 juillet, au même prix que Ext JS 3.0) intègre les nouveaux buffered Grid View, Row Editor, et permettait déjà simplement (par conception - grâce à la phase de génération) l'intégration d'une gestion CRUD en Java côté serveur. Cependant cette solution requiert encore beaucoup de code à écrire (voir le code source de l'exemple GXT Grid Store Data Binding - par ailleurs pas plus rapide à charger qu'une application CP) et on en revient aux limitations de GWT par rapport à Cappuccino :
- phase de génération (procédé peu élégant et casse le cycle de développement), et dont le générateur n'est pas open source,
- code javascript généré est très difficile à débugger en profondeur,
- basé sur le modèle de composants Swing (très limité par rapport aux concepts de Cocoa),
- ne permet pas l'intégration avec Cappuccino. On perd ainsi les fonctionnalités de haut niveau tels que le moteur graphique évolué, l'undo/redo, le drag&drop, la gestion avancée et automatique du layout, la chaîne de délégation, le runtime puissant, etc.
Avec Ext JS 3.0 (pur javascript) l'intégration avec Cappuccino était éventuellement envisageable, mais l'intérêt est finalement très faible d'après les raisons évoquées ici (le mode Direct2CP de CP2JavaWS repose sur les méthodes delegate classiques prévues par Cocoa).
Commentaires
Poster un commentaire 
  
    
  image de securisation du formulaire


  
      (sera ajouté après validation)