La création d'une classe dans un site WEBDEV permet de créer une classe serveur, navigateur, ou une classe mixte :

 

 

  • les instances d'une classe serveur, seront exclusivement allouées et utilisables dans un code serveur du site,
  • de même pour les instances d'une classe navigateur, elles seront nécessairement allouées depuis un code navigateur du site,
  • par contre les instances d'une classe mixte, pourront être déclarées en code serveur, mais également en code serveur.
    Attention, cela ne veut par dire qu'une instance déclarée en code serveur sera également accessible en code navigateur. En revanche pour cette classe il sera possible de déclarer une instance en code navigateur, et une autre instance en code serveur.

 

Se pose donc la question de l'échange des données entre deux instances d'une classe mixte, l'une déclarée côté serveur, l'autre côté navigateur. En effet, l'attribut d'extension <synchronisé navigateur> ne s'applique pas à une instance de classe.


Comme bien souvent pour l'échange de données structurées, la sérialisation est l'alternative la plus simple. En effet la totalité de l'instance d'une classe peut être transformée en chaîne formatée par le principe de sérialisation. Et une chaîne peut être très simplement partagée entre les codes navigateurs, et les codes serveurs en la déclarant avec l'attribut <synchronisé navigateur>.

 


Ainsi il sera facile d'échanger les données avec le principe :

  • sérialisation d'une instance de classe serveur dans une chaine synchronisée en code navigateur,
  • désérialisation de la chaîne dans l'instance de classe navigateur.

Voici un exemple :

// Déclaration d'une classe

cDonnéesFormulaire est une Classe
m_nID est un entier
m_sRésume est une chaîne
m_sUInfo est une chaîne
m_dDébut est une Date
m_dFin est une Date
m_sInfoSRV est une chaîne, Sérialise = Faux
FIN

// Code serveur de déclarations globales d'une page

gclDonnées est une cDonnéesFormulaire
gsPourTransfertDonnées est une chaîne <synchronisé navigateur>

 

------------------------------------------

 

// Code navigateur de chargement de la page (onload)

gclDonnées_Nav est un cDonnéesFormulaire

 

------------------------------------------

// Un code serveur quelconque (clic bouton, procédure...)

// affecte l'instance serveur de la classe cDonnéesFormulaire

// et la sérialise

gclDonnées.m_nID = 1
gclDonnées.m_sRésume = "démo"
gclDonnées.m_dDébut = DateSys()

Sérialise(gclDonnées, gsPourTransfertDonnées, psdJSON)

 

------------------------------------------

 

// Un code navigateur quelconque (code onclick bouton...)

// récupère l'instance serveur via la chaîne sérialisée

Désérialise(gclDonnées_Nav, gsPourTransfertDonnées, psdJSON)

Info(gclDonnées_Nav.m_nID, gclDonnées_Nav.m_sRésume)

 

Rappelons que toute variable envoyée au navigateur est visible par les options de débogage du navigateur. Le partage de données entre le navigateur et le serveur est appréciable pour structurer le développement, mais il faut toujours s'assurer que les données sensibles sont exclusivement côté serveur. En cas de partage tel que décrit ci-dessus, il est possible de ne pas transéférer un des membre avec l'attribut d'extention <serialise>, tel q'illustré pour le membre "m_sInfoSRV".

< Retour

Publier un commentaire : 
Votre adresse email ne sera pas publiée