8
votes

Comment synchronisez-vous le code côté serveur et côté client?

Quelque chose que j'apprends (et l'enseignement) dans l'ingénierie logicielle est que la duplication de code est la racine de tout mal. D'autre part, je trouve tout à fait difficile d'expliquer comment ce concept devrait être appliqué au développement d'applications Web.

Permettez-moi de clarifier ... L'entrée et la validation des données peuvent être une partie importante d'une application Web. Parfois, cette validation peut être assez complexe. Par exemple, j'ai travaillé sur un éditeur de puzzle et la validation consistait à vérifier si une opération ou un déplacement était valide. Les règles non triviales devaient alors être vérifiées.

Naturellement, la validation doit être effectuée côté serveur afin d'assurer la cohérence et la qualité des données stockées. Cependant, il est indispensable de faire la validation du côté client pour assurer une expérience utilisateur en douceur.

Dans la plupart des cas, le code côté client et le code serveur sont écrits dans différentes langues (c'est-à-dire JavaScript / Python), le code de validation doit donc être écrit deux fois. Cependant, dans ma seule expérience avec GWT / Java (Java des deux côtés), j'ai constaté qu'une grande partie du code de validation pourrait être réutilisée. Cela semblait tout faire plus facilement: maintenance, refactoring, débogage ...

Donc, ma question à vous est: comment gérez-vous les problèmes liés à la duplication de code dans les projets où les langues côté client et le côté serveur sont différentes?


2 commentaires

En ce qui concerne la validation, voir Stackoverflow.com/questions/39628/... et Stackoverflow.com/questions/778726/...


Merci, des messages très pertinents, que je manquais d'une manière ou d'une autre.


3 Réponses :


4
votes

La façon dont je traite habituellement ceci consiste à écrire le code de validation du côté serveur et à l'exposer via une méthode Web (dans .NET, une fonctionnalité similaire existe dans la plupart des autres langues) afin qu'elle puisse être appelée à partir de JavaScript. En conséquence, vous avez une seule méthode qui peut être appelée de manière synchrone et asynchrone du côté du client et également appelée du côté serveur. Ce n'est pas applicable dans tous les cas, mais cela a très bien fonctionné pour moi jusqu'à présent.


4 commentaires

Un service de validation? A du sens, mais les retards de réseau peuvent le rendre impraticable lorsque l'objectif est d'avoir une interface utilisateur interactive.


Cela dépend de la façon dont vous le gérez. Si vous faites des appels ASYNC en arrière-plan, vous pouvez très bien mettre en évidence la zone invalide. Si vous cherchez à faire des appels de synchronisation, assurez-vous qu'ils sont légers et que cela ne devrait pas être un problème. C'est étonnant à quel point les appels http rapides peuvent être si vous conservez la charge utile.


Cela est vrai, sauf lorsque vous avez une connexion de merde pour une raison quelconque (par exemple, réseau de bord de téléphone cellulaire). Il y aura toujours des situations de latence élevées. On a l'impression que si vous voulez que ce soit vraiment réactif, vous devez avoir un code côté client.


D'accord. Lorsque je parlais de "n'est pas applicable dans tous les cas", une connexion de réseau tacheté et des connexions à faible bande passante constitueraient certaines de ces cas où vous auriez besoin de trouver une solution différente. Dans le cas général, c'est généralement l'approche que je prends jusqu'à la raison pour laquelle je devrais dévier.



0
votes

Une solution possible est que vous résumez la validation réelle dans un fichier de description de validation (en XML ou tout autre moyen) à l'aide d'un DSL. De cette façon, il vous suffit de mettre en œuvre le moteur de validation dans la langue des clients et du serveur et de baser les validations dans le même fichier de description.


1 commentaires

J'ai l'impression que la "validation" est généralement prise pour signifier quelque chose de plus spécifique que ce que je pensais. Bien sûr, la validation peut consister à vérifier le contenu d'un champ de texte. Plus généralement, cependant, il s'agit de s'assurer que la manière dont le modèle est modifié est légal, étant donné son état actuel. Cette définition de "validation" le rend difficile, à mon avis, de le faire en utilisant quelque chose de moins qu'un langage de programmation.



3
votes

Typiquement, il est vraiment difficile d'éviter de faire dupliquer le code généré, mais une approche commune consiste à utiliser un générateur de code pour construire le code serveur ou le code côté client afin que vous ne coportez qu'une seule moitié. L'approche la plus populaire consiste à écrire le côté du serveur et au générateur de code construit le code JavaScript pour vous. Par exemple, la langue que nous utilisons chez ma société est Coldfusion et Form-O-Matic résout ce problème pour nous . Les gens ont également abordé le problème de la direction opposée en écrivant JavaScript qui peut être exécuté côté serveur. Je chercherais un cadre qui le fera pour vous.


4 commentaires

Merci. Cela contribue grandement à répondre à ma question. Alors GWT, considéré comme un générateur de code, essentiellement dans la même direction? Y a-t-il des générateurs de code que vous parlez de la flexibilité et de la puissance d'un langage de programmation à part entière? (Afin de faire une validation non basée sur la forme, comme ce que j'ai décrit.)


Je pense que GWT est l'un des plus éloignés que j'ai vu parce que vous écrivez à côté de zéro code côté client. Je ne l'ai pas expérimenté du tout, mais je pense que la seule chose qui fournirait un langage de programmation à part entière pouvant avoir du code exécuté à la fois du client et du côté serveur sont les cadres permettant à JavaScript de s'exécuter sur le serveur. Je suis sûr qu'il y a encore des limitations là-bas, mais l'objectif est d'écrire de rien que Javascipt et il peut être exécuté n'importe où. Personnellement, je n'aime pas assez Javascript pour le faire, mais si vous le souhaitez, vous pourriez aller à cet itinéraire.


Découvrez la page Wikipedia ici pour les mêmes projets qui sont allés dans cette direction: en.wikipedia.org/ wiki / serveur-côté_javascript .


Merci pour la page Wikipedia. Très utile. Vous écrivez le code côté client dans GWT, vous vous écrivez simplement en Java et le JavaScript est généré à partir de là. Vous pouvez donc prendre des parties de votre code et les exécuter à la fois sur le côté client (après la génération JavaScript) et le côté serveur (à l'intérieur d'un servlet).