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 :
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
gclDonnées est une cDonnéesFormulaire gsPourTransfertDonnées est une chaîne <synchronisé navigateur>
------------------------------------------
gclDonnées_Nav est un cDonnéesFormulaire
------------------------------------------
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)
------------------------------------------
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". |