Navigateur Unicode
Une application Web Blazor C# pour parcourir la base de données de caractères Unicode.
L'application y est hébergée : https://unicode-browser.azurewebsites.net/home
Caractéristiques
- Décomposez le texte en points de code Unicode.
- Afficher des informations détaillées sur un point de code.
- Parcourez les points de code dans un bloc Unicode donné.
- Recherchez n’importe quel personnage par son nom.
- Afficher des informations complémentaires (au format Markdown) sur les pages dédiées aux blocs Unicode.
Essayez-le
Voici quelques URL que vous pouvez essayer pour voir l'application en action :
- https://unicode-browser.azurewebsites.net/blocks/Miscellaneous%20Symbols%20and%20Pictographs
- https://unicode-browser.azurewebsites.net/codepoints/1F365
- https://unicode-browser.azurewebsites.net/search?q=Tree
- https://unicode-browser.azurewebsites.net/decomposition?text=????????
- https://unicode-browser.azurewebsites.net/blocks/Tangut
- https://unicode-browser.azurewebsites.net/blocks/Tags
Principales technologies utilisées
- ASP.NET Core 3.0 (.NET Core 3.0.0-preview8.19405.7)
- Blazer
- Markdig 0.17.1
- Amorcer 4.1
- Police géniale 5.0.10
- jQuery 3.3.1 (car Bootstrap JS semble toujours l'exiger)
Liens vers la documentation
La documentation Blazor est disponible sur docs.microsoft.com.
Histoire
La plupart de cette application a été initialement écrite début 2016, à l'aide d'une version préliminaire d'ASP.NET Core, TypeScript et Aurelia. À l’époque, c’était l’occasion de découvrir ces tout nouveaux frameworks, et cela a très bien fonctionné.
Le code source de la version actuelle est pour l’essentiel une simple adaptation du premier prototype. En fait, la majeure partie du code du serveur a simplement été portée vers ASP.NET Core 2.1 avec très peu de modifications.
Cependant, c'est dans la partie client que se trouvait le "plaisir", car seules les parties HTML étaient réutilisables. (Et nécessitait toujours une migration vers Bootstrap 4 / Fontawesome 5) C'était, encore une fois, une excellente occasion de tester et d'apprendre à utiliser Blazor, ainsi que de se tenir à jour avec les autres technologies.
Des pièges
Blazor est une technologie très nouvelle, encore en avant-première, et peut parfois être difficile à gérer.
À cause de cela, je me suis retrouvé à tomber sur des choses que je pensais triviales, et j'ai l'impression que j'ai dû écrire beaucoup de code passe-partout pour que ces choses fonctionnent.
par exemple
* J'ai été assez déçu de ne pas pouvoir partager mes classes Model entre le serveur et le client, car Blazor utilise actuellement SimpleJson, qui est extrêmement limité. ? (Et malheureusement, Newtonsoft.Json ne semble pas fonctionner assez bien pour le moment. ?)
- La liaison aux paramètres de chaîne de requête doit être effectuée manuellement
- Les pages doivent parfois écouter manuellement les changements d'emplacement (par exemple pour les changements d'URL sur la même page)
- Il n’existe pas de gestion étatique prête à l’emploi. (par exemple, que se passe-t-il lorsque vous avancez et reculez dans l'historique) => J'ai résolu ce problème en ne nécessitant pas du tout de gestion d'état et en m'appuyant toujours sur la route ou la chaîne de requête pour cela.
- Le cycle de vie du composant ne semble pas très extensible : il serait difficile d'ajouter un comportement complexe dans une classe de base (par exemple afficher un spinner avant le chargement du contenu)
Les choses se sont améliorées dans la version 3.0 (les paramètres de route sont désormais décodés ?) mais je pense que la plupart des points restent vrais.
Quelques nouveautés pour .NET Core 3.0 :
- System.Text.Json est le nouveau sérialiseur JSON (par défaut) pour Blazor. Il est cependant très rugueux sur les bords. L'indisponibilité pour désérialiser les types immuables prêts à l'emploi est vraiment pénible. ? => J'ai implémenté un JsonConverter pour gérer ce cas précis. En s'appuyant sur la génération de code dynamique, on peut créer un type que la nouvelle API acceptera de désérialiser, puis instancier le type immuable.
- Dans la version préliminaire 8, les projets clients Blazor doivent toujours cibler .NET Standard 2.0 et non .NET Standard 2.1.