Récemment, j'ai rencontré un tel scénario d'application. Une certaine entreprise utilise un système développé par PowerBuilder depuis de nombreuses années. Au fur et à mesure du développement de l'entreprise, elle a décidé de convertir l'ancien système d'information de C/S à l'architecture populaire B/S. le problème est survenu : l'original Certains systèmes disposent d'un grand nombre de saisies de données, d'impressions de rapports précises et d'autres fonctions, et les utilisateurs sont très habitués à ce type d'opération. On espère que le nouveau système pourra conserver cette fonctionnalité facile à utiliser. du système d'origine.
J'ai eu mal à la tête dès que j'ai entendu cette question. PB dispose de nombreux contrôles puissants. Il est trop difficile de les déplacer vers le navigateur et d'utiliser des pages Web pour les simuler.
1. Pourquoi est-il difficile pour B/S de fournir une bonne expérience d'interaction utilisateur ?
Il y a ici plusieurs problèmes majeurs :
(1) Le protocole HTTP sans état
peut échanger directement des informations entre les formulaires Windows via la mémoire, mais comme base de B/S. architecture communication Le protocole HTTP est sans état.
Si le navigateur est considéré comme un invité et le serveur Web comme un hôtel, sous la gestion du protocole HTTP, cette situation se produira : peu importe le nombre de visites d'un invité, le serveur Web le considérera comme un premier client. visiteur du temps. De cette manière, les clients doivent à chaque fois apporter leurs pièces d'identité avec eux pour que le personnel de l'hôtel puisse « vérifier leur identité ».
L'apatridie du protocole HTTP conduit au « mépris » du serveur Web. Bien que cela puisse augmenter le débit du serveur Web, cela pose des problèmes au développement des systèmes d'application. Parce qu'il existe souvent de nombreux processus de traitement métier dans les systèmes d'application, qui sont par nature un flux d'informations, c'est-à-dire que les données d'origine entrent par une extrémité et auraient dû subir un certain traitement lorsqu'elles sortent de l'autre extrémité. les informations de l'ensemble du processus métier seront-elles perdues ? Par conséquent, le partage d'informations entre les requêtes HTTP devient un problème problématique. Il s'agit du problème de « conservation de l'état » des requêtes HTTP. Chaque système B/S doit résoudre ce problème. Microsoft a pensé à quelques "astuces tordues", comme utiliser pleinement les champs cachés dans les pages Web HTML, puis effectuer quelques astuces sur le serveur Web. ASP.NET dispose donc d'un ensemble de technologies pour maintenir l'état entre chaque requête HTTP : Session, Cookie, ViewState, Profil, Application.
Toutefois, le problème n’est pas complètement résolu. Par exemple, dans la boîte de dialogue commune du système C/S qui collecte les informations saisies par l'utilisateur, il y a un échange d'informations entre le formulaire principal et la boîte de dialogue (elle est divisée en deux types : modale et non modale. La première boîte de dialogue est pas fermé. Le formulaire principal ne peut pas être activé). Sous l'architecture B/S, puisque chaque requête du navigateur est indépendante, un échange d'informations direct similaire à une boîte de dialogue modale doit être implémenté entre deux fenêtres de navigateur indépendantes. savoir quoi faire.
AJAX utilise la méthode suivante pour « simuler » un formulaire modal : « combiner » le formulaire principal et la boîte de dialogue en un seul. La boîte de dialogue est un élément div en HTML, qui est généralement masqué et affiché en cas de besoin. La boîte à outils de contrôle AJAX de Microsoft dispose même d'un contrôle conçu pour cette fonctionnalité. Il existe d'innombrables astuces de ce type dans le développement B/S.
On peut constater que de nombreuses fonctions qui peuvent être facilement implémentées en C/S sont très difficiles à implémenter en B/S.
(2) Environnement d'exploitation spécial -
l'environnement d'exploitation frontal du système de navigation B/S est le navigateur, ce qui entraîne de nombreuses restrictions. Il ne peut pas faire beaucoup de choses, comme accéder directement au matériel (tel que les imprimantes), et ne peut pas effectuer de tâches complètes. son utilisation. Par exemple, les nouveaux ordinateurs d'aujourd'hui sont tous dual-core. Pouvez-vous utiliser directement JavaScript et HTML pour écrire un programme multithread afin d'utiliser pleinement ces deux « cœurs Pentium » ?
Le système C/S s'exécute directement sur le système d'exploitation (d'exploitation) ? système) Ci-dessus, vous pouvez appeler toutes les fonctions fournies par le système d'exploitation, et cette limitation n'existe pas.
(3) Le langage de programmation client Web embarrassant - JavaScript,
un programme C/S traditionnel, peut utiliser un grand nombre de langages de développement différents, en particulier les langages orientés objet traditionnels tels que C++, Java et C#, qui sont puissant et simple à utiliser, divers outils de développement sont disponibles et sont très matures.
Au contraire, JavaScript, le langage de programmation le plus couramment utilisé sur le front-end B/S, est non seulement détesté, mais même « détesté » par de nombreux programmeurs, qui considèrent la « programmation avec JavaScript » comme une corvée.
Jetons un coup d'œil aux deux défauts majeurs de JavaScript.
Premièrement, il manque un modèle de programmation clair et unifié.
Bien que JavaScript ait Java dans son nom et utilise une syntaxe similaire, il n'a rien à voir avec le vrai Java. Hélas, c'est un vilain petit canard. Elle veut toujours devenir un cygne, mais elle ne s'attend pas à ce que les autres n'achètent pas son idée.
JavaScript utilise de nombreux objets, mais il n'est vraiment pas convaincant de dire qu'il est orienté objet (l'unité de base de la programmation orientée objet est une classe). Par exemple, il n'a pas de classe de mots-clés similaire aux langages orientés objet traditionnels. comme C#. Il y a partout des fonctions une par une, ce qui rend difficile de définir clairement tout le code sous forme de classes en même temps, il n'est pas structuré (l'unité de base de la programmation structurée est une fonction) ; ), car le navigateur utilise un flux lors de l'analyse des documents HTML. Cela conduit à ce qu'une partie du code JavaScript soit placée en dehors de la fonction et exécutée directement lors de l'analyse du document HTML, tandis que l'autre partie du code placée dans la fonction est principalement exécutée dans un événement. de manière pilotée, ce qui entraîne des problèmes complexes. Le flux d'exécution du programme est beaucoup moins concis que l'utilisation unifiée des appels de fonction dans une programmation purement structurée.
De ce point de vue, JavaScript présente les caractéristiques des méthodes de programmation orientées objet, structurées et non structurées, mais ce n'est ni du poisson ni de la volaille. Il n'a pas de modèle de programmation clair et unifié. structure et entretien facile. Beaucoup de confusion est venue.
Deuxièmement, un autre défaut de JavaScript est son environnement d’exécution de navigateur.
Pour des raisons historiques, différents navigateurs, et même différentes versions d'un même navigateur, ont des modèles de programmation plus ou moins différents. Par conséquent, nous devons écrire du code pour détecter le type de navigateur. Par exemple, nous devons écrire un ensemble de codes pour. IE, et j'ai écrit un autre ensemble pour FireFox. C'est vraiment un problème.
Les problèmes ci-dessus sont presque des « défauts » « inhérents » au système d’architecture B/S. Les déficiences innées sont complétées par l'éducation, et les gens ont trouvé de nombreuses astuces pour résoudre ces problèmes. AJAX est la star de l’espoir pour laquelle tout le monde est optimiste.
2. Star of Hope - AJAX
Au cours des derniers jours, j'ai systématiquement découvert le framework AJAX de Microsoft. J'ai constaté que la complexité de ce framework dépassait de loin mon estimation initiale. Les ingénieurs Microsoft qui ont conçu le framework AJAX ont exploré en profondeur le potentiel de diverses technologies de développement Web, ce qui a largement compensé les problèmes soulevés précédemment.
(1) Extension du langage JavaScript :
Microsoft a amélioré les fonctionnalités orientées objet de JavaScript en fournissant une bibliothèque AJAX encapsulée, qui peut facilement implémenter des fonctions telles que l'héritage, la définition d'interfaces, la sérialisation d'objets, le déclenchement d'événements, les types de réflexion, etc., bien qu'elle est plus petit que le réel Il existe encore un écart entre les langages orientés objet (tels que Java/C#), mais être capable d'habiller du JavaScript « laid » en quelque chose de visible est considéré comme extraordinaire.
(2) Améliorer considérablement la fonctionnalité du code côté navigateur
Avec la prise en charge de la bibliothèque AJAX et la fonctionnalité améliorée de JavaScript, et avec la prise en charge du navigateur lui-même, vous pouvez écrire des scripts JavaScript dans le navigateur pour effectuer facilement des requêtes asynchrones au navigateur. serveur. , réalise une actualisation partielle de la page et peut appeler directement le service Web.
(3) Introduction de la méthode de développement basée sur les composants (CBD).
Le développement basé sur les composants (CBD) est depuis longtemps la méthode de développement dominante pour les systèmes orientés objet. Bien que la SOA (architecture basée sur les services) soit actuellement très en vogue, elle doit le faire. Atteindre la maturité du CBD Dans une certaine mesure, cela prendra du temps.
Pour JavaScript, sans parler de SOA, il est très difficile d'implémenter CBD.
Afin de réaliser le CBD, Microsoft a « apporté des améliorations majeures » à JavaScript et amélioré de nombreuses fonctionnalités. Basé sur la bibliothèque Microsoft AJAX, les programmeurs peuvent développer trois types de composants réutilisables : None_Visual Component (composant invisible, équivalent à un système orienté objet). d'entre eux fournissent des fonctions publiques), Comportement (comportement, extension des fonctions des contrôles Web existants) et Contrôle (contrôles Web avec des éléments d'interface visuelle).
En particulier, les dizaines de contrôles fournis dans AJAX Control ToolKit réalisent essentiellement la simulation B/S de la plupart des fonctionnalités de l'interface utilisateur C/S et constituent un modèle pour l'application de ce nouveau modèle de programmation.
Les améliorations apportées par Microsoft au modèle de programmation JavaScript permettent aux ingénieurs logiciels de développer enfin le code client Web à l'aide des méthodes de développement CBD. Je pense que c'est un progrès.
(4) Capacités améliorées côté serveur
Afin d'améliorer les capacités du code côté navigateur, celui-ci doit être coordonné via le côté serveur. AJAX lui-même est basé sur le modèle de programmation dans lequel le navigateur et le serveur Web se soutiennent mutuellement (le serveur Web fournit des services de données et le navigateur fournit des objets XMLHttpRequest pour émettre des requêtes asynchrones au serveur Web. Lorsque les données reviennent, les programmeurs peuvent écrire du code en JavaScript pour mettre en œuvre un traitement partiel dynamique des pages Web renouvelées).
Grâce à l'extension AJAX, Microsoft a amélioré les fonctionnalités du framework ASP.NET côté serveur. Et externalisez les fonctions couramment utilisées dans des contrôles Web simples, tels que le contrôle principal d'AJAX, ScriptManager, UpdatePanel pour définir les zones pouvant être mises à jour de la page et des dizaines d'outils de contrôle AJAX pour améliorer le contrôle Extender ASP.NET existant (c'est-à-dire un contrôle attaché à. un champ existant, dont le but est d'étendre de nouvelles fonctions au champ existant).
Avec ces contrôles, le développement de programmes Web frontaux est similaire à la conception de formulaires en VB. Désormais, il est non seulement possible de dessiner une interface similaire à Windows Forms, mais également en utilisant la technologie de requête asynchrone et d'actualisation partielle de la page d'AJAX, et avec la coopération du serveur Web, l'expérience utilisateur peut être forcée dans Windows Forms.
Peu importe le nombre de personnes méprisant VB, la vague de vulgarisation de la programmation visuelle apportée par VB a en effet eu un impact considérable. La poussée de Microsoft en faveur de la programmation JavaScript à ce stade est également la tendance générale. Afin d’améliorer l’efficacité du développement Web, cette étape doit être franchie.
Cependant, il convient de souligner que peu importe à quel point elle est « reconstituée », après tout, elle est « congénitalement déficiente » et il est encore très difficile pour l'architecture B/S de surpasser C/S en termes d'expérience utilisateur. .
3. L'avenir : B/S ou C/S, qui commande ?
En raison de la simplicité de gestion et de déploiement, l'architecture B/S est devenue aujourd'hui le premier choix pour de nombreux systèmes d'information. Cependant, les utilisateurs recherchent un bon utilisateur. expérience. Pour résumer, il y a les exigences suivantes :
(1) Belle interface. B/S a un avantage à cet égard.
(2) Entrée pratique. Par exemple, de nombreux utilisateurs espèrent saisir des données sans utiliser de souris, ou remplir automatiquement des données par de simples clics. Ceci est difficile à mettre en œuvre sous une architecture B/S et peut résoudre ce problème dans une certaine mesure.
(3) Vitesse fulgurante. Pour le C/S, il existe de nombreuses façons d’obtenir une vitesse de réponse rapide, mais ce n’est pas facile pour le B/S. En raison des limitations du navigateur, les puissantes ressources matérielles du client sont presque inutilisées. De plus, la vitesse du réseau constitue le goulot d'étranglement de l'architecture B/S. À moins que la bande passante ne puisse augmenter rapidement, WWW sera une attente mondiale.
Bien que C/S offre une bonne expérience utilisateur, son problème est qu'il est difficile de développer un système distribué qui s'étend sur l'ensemble d'Internet. De plus, puisque le client doit être installé, les mises à jour du système et la gestion des versions des composants deviennent un gros problème. De plus, contrairement à B Dans l'architecture /S, seuls les problèmes côté serveur doivent être pris en compte dans l'architecture C/S, en raison de l'accès simultané de plusieurs utilisateurs au serveur, les appels et les dépendances entre les composants sont complexes. doit également être pris en compte lorsqu'il s'agit d'accès multithread aux ressources partagées, de traitement des transactions, etc. Du côté serveur, le débit est considérablement limité. Par conséquent, C/S est principalement construit dans le réseau local pour un usage interne de l’entreprise.
À l'heure actuelle, B/S et C/S coexistent essentiellement. Avec l'application généralisée des technologies B/S telles qu'AJAX, B/S continue de prendre le dessus, mais il est impossible de « vaincre complètement C/S ». .
Ce qui est plus intéressant, c'est : comment une grande entreprise comme Microsoft voit-elle les perspectives de développement de B/S et C/S ?
Les développeurs ordinaires comme moi n'ont pas la possibilité de parler directement aux dirigeants de Microsoft, mais nous pouvons le voir à partir du profil de l'entreprise. voie de développement de produits. Voici quelques indices :
Microsoft ne semble pas croire que le B/S représente l'orientation future du développement technologique. Au contraire, nombre de ses actions vont dans le sens de l'abandon des navigateurs.
Tout d'abord, Microsoft a simplifié le développement et le déploiement de C/S et a lancé la technologie Smart Client, afin que la mise à jour des programmes clients C/S puisse être effectuée automatiquement sans intervention manuelle.
Deuxièmement, Microsoft a travaillé dur pour combler le fossé entre B/S et C/S. Lors de la conception d'ASP.NET, il a résolument abandonné ASP, qui avait obtenu de bons résultats, et a directement adopté une méthode de programmation similaire « contrôle visuel + événementiel ». en VB, même les pages Web sont appelées "Formulaires" - Web Forms.
Troisièmement, Microsoft pourrait considérer AJAX comme une technologie de transition.
Microsoft a mis du temps à agir sur AJAX jusqu'à ce qu'il constate la popularité rapide d'AJAX en raison de l'application réussie de la technologie AJAX par Google et d'autres sociétés pour améliorer l'expérience des utilisateurs Web. Il a ensuite pris des mesures et ajouté des extensions AJAX à ASP.NET. L'ensemble du processus était évidemment Les actions n'étaient pas agressives et peu de ressources étaient investies. C'était complètement différent de l'époque où Microsoft et Netscape avaient lancé une guerre des navigateurs. Cependant, le fait qu'il intègre l'extension AJAX en tant que configuration standard dans VS2008 et qu'il intègre directement la fonction de débogage JavaScript dans l'EDI montre que Microsoft est toujours confronté à la réalité et reconnaît qu'AJAX occupe une position importante et un grand potentiel de développement.
En fait, j'analyse que l'ambition de Microsoft est « d'unifier le monde », d'abandonner le navigateur et d'unifier complètement B/S et C/S.
Cela se voit clairement dans .NET 3.0/3.5.
Tout d'abord, Microsoft a utilisé WCF pour unifier DCOM, .NET Remoting et d'autres technologies principalement utilisées pour C/S, intégrant de nombreuses fonctionnalités de développement d'entreprise initialement situées dans COM+, ainsi que la technologie de service Web principalement utilisée pour l'architecture B/S, pour unifier le résumé. et encapsuler dans un service WCF réutilisable. Il est évident que Microsoft souhaite changer le modèle de développement des systèmes d'information du CBD au SOA (c'est-à-dire que les futurs systèmes assembleront des services plutôt que des composants).
Deuxièmement, Microsoft a abandonné le modèle de programmation très mature des programmes de bureau Windows (API Win32 + pilote de message/événement) et a introduit un nouveau framework de programmation WPF. L'une des innovations majeures est l'émergence du XAML (Application Markup Language) conforme à la spécification XML. . XAML utilise des fichiers de texte brut au format XML pour décrire les interfaces d'application.
Nous pouvons facilement comparer XAML à XHTML. Le navigateur analyse le code XHTML et génère une interface Web visuelle, tandis que XAML est analysé par la machine virtuelle .NET Framework. Dans Vista, puisque Vista intègre directement .NET Framework 3.0, Vista peut être considéré comme un super navigateur. Il est responsable de la lecture. XAML pour générer l'interface utilisateur et implémenter toutes ses fonctions d'application.
En conséquence, un nouveau modèle de programmation a émergé. Qu'il s'agisse d'un système B/S ou C/S, la méthode est unifiée : lire le code XAML à analyser à présenter à recevoir les entrées de l'utilisateur à traiter les données à afficher le résultat.
Dans ce modèle de programmation, le navigateur devient un spectateur et n'est plus le cœur de l'application client.
Le nouveau modèle de programmation fonctionne sur un système d'exploitation complet plutôt que sur un navigateur aux fonctionnalités limitées. La différence est énorme : comment comparer les fonctions d'un navigateur fonctionnant sur le système d'exploitation avec le système d'exploitation lui-même !
Désormais, le système d'exploitation peut être facilement appelé via l'API (Application Programming Interface) du système d'exploitation organisée de manière orientée objet. des fonctions pour utiliser pleinement les ressources matérielles du client (par exemple, vous pouvez facilement développer des programmes multithread au-dessus du .NET Framework pour « presser » les capacités de travail du processeur double cœur). Les interfaces utilisateur sont toutes décrites à l'aide de XAML, qui unifie les technologies de couche d'interface B/S et C/S.
L'environnement d'exécution le plus approprié pour WPF est le système d'exploitation Vista. Un sous-ensemble de ses fonctions, désormais appelé Silverlight, est implémenté sous forme de plug-in de navigateur, permettant aux programmes WPF de s'exécuter dans les navigateurs traditionnels. Étant donné que Silverlight et Vista peuvent analyser eux-mêmes XAML, vous pouvez désormais utiliser XAML pour écrire un seul ensemble de codes d'interface, applicable à la fois à B/S et C/S et offrant la même expérience utilisateur.
En raison de certaines lacunes inhérentes à B/S et AJAX, si le système B/S amélioré par AJAX est comparé à un danseur, alors il s'agit en fait d'un danseur dansant avec des chaînes, et l'idée de Microsoft est : Au lieu d'essayer constamment de réduire le poids de cette entrave, pourquoi ne pas simplement abandonner cette entrave ?
Le lancement par Microsoft de WPF et WCF est une telle tentative ?
Il faut dire que la stratégie de développement de Microsoft repose sur l'analyse des avantages et des inconvénients des B/S et C/S existants. Elle a son caractère scientifique et prend également en compte ses propres intérêts commerciaux. Cependant, de nombreuses difficultés subsistent pour mettre en œuvre cette stratégie, car même aussi puissant que Microsoft, il ne peut pas dominer le monde. Les adversaires de Microsoft sont tout aussi intelligents que Microsoft et leur technologie progresse tout aussi rapidement.
On peut conclure qu'en raison de la continuité des applications des systèmes d'information, B/S et C/S coexisteront en même temps pendant une longue période (peut-être trois à cinq ans, peut-être cinq à dix ans puisqu'il y en a). De nombreuses caractéristiques exceptionnelles de B/S prévaudront dans la concurrence avec C/S, et cette situation ne changera pas de manière significative. Quant à AJAX, en tant qu'arme lourde du système B/S, bien qu'il soit très efficace, il présente de nombreux défauts, je suis prudemment optimiste quant à son développement futur. Cependant, en tant que développeur Web, vous devez comprendre et appliquer cette technologie.
Ce à quoi ressemblera le paysage futur et la question de savoir si une technologie donnée a un avenir ne sont pas décidés par les individus. Je pense que le schéma final de la bataille entre B/S et C/S sera le résultat du jeu conjoint de plusieurs facteurs. Pour les individus, ils doivent suivre le rythme de leur temps et ajuster leurs actions et leurs stratégies en temps opportun. C'est le sort des développeurs de logiciels contemporains.