Unicode-Browser
Eine Blazor C#-Webanwendung zum Durchsuchen der Unicode-Zeichendatenbank.
Die Anwendung wird dort gehostet: https://unicode-browser.azurewebsites.net/home
Merkmale
- Zerlegen Sie Text in Unicode-Codepunkte.
- Detaillierte Informationen zu einem Codepunkt anzeigen.
- Durchsuchen Sie Codepunkte in einem bestimmten Unicode-Block.
- Suchen Sie einen beliebigen Charakter nach Namen.
- Zeigen Sie zusätzliche Informationen (im Markdown-Format) auf Seiten an, die Unicode-Blöcken gewidmet sind.
Probieren Sie es aus
Hier sind einige URLs, die Sie ausprobieren können, um die Anwendung in Aktion zu sehen:
- 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
Hauptsächlich verwendete Technologien
- ASP.NET Core 3.0 (.NET Core 3.0.0-preview8.19405.7)
- Blazor
- Markdig 0.17.1
- Bootstrap 4.1
- Font Awesome 5.0.10
- jQuery 3.3.1 (Weil Bootstrap JS es immer noch zu erfordern scheint)
Dokumentationslinks
Die Blazor-Dokumentation ist unter docs.microsoft.com verfügbar.
Hintergrundgeschichte
Der Großteil dieser Anwendung wurde ursprünglich Anfang 2016 unter Verwendung einer Vorschauversion von ASP.NET Core, TypeScript und Aurelia geschrieben. Damals war dies eine Gelegenheit, etwas über diese sehr neuen Frameworks zu lernen, und es hat großartig funktioniert.
Der Quellcode der aktuellen Version ist größtenteils eine einfache Adaption des frühen Prototyps. Tatsächlich wurde der Großteil des Servercodes einfach mit sehr geringen Änderungen auf ASP.NET Core 2.1 portiert.
Der „Spaß“ lag jedoch im Client-Teil, da nur die HTML-Teile wiederverwendbar waren. (Und es war immer noch eine Migration auf Bootstrap 4 / Fontawesome 5 erforderlich) Dies war wiederum eine großartige Gelegenheit, Blazor zu testen und zu lernen, wie man es verwendet, und sich auch über die anderen Technologien auf dem Laufenden zu halten.
Fallstricke
Blazor ist eine sehr neue Technologie, die sich noch in der frühen Vorschau befindet und manchmal schwierig zu handhaben sein kann.
Aus diesem Grund bin ich über Dinge gestolpert, die ich für trivial gehalten habe, und ich habe das Gefühl, dass ich eine Menge Standardcode schreiben musste, um diese Dinge zum Laufen zu bringen.
z.B
* Ich war ziemlich enttäuscht, dass ich meine Modellklassen nicht zwischen dem Server und dem Client teilen konnte, da Blazor derzeit SimpleJson verwendet, was stark eingeschränkt ist. ? (Und leider scheint Newtonsoft.Json im Moment nicht gut genug zu funktionieren. ?)
- Die Bindung an Abfragezeichenfolgenparameter muss manuell erfolgen
- Seiten müssen manchmal manuell auf Standortänderungen warten (z. B. auf URL-Änderungen auf derselben Seite).
- Es gibt keine standardmäßige Zustandsverwaltung. (z. B. Was passiert, wenn Sie im Verlauf vor- und zurückgehen) => Ich habe das gelöst, indem ich überhaupt keine Statusverwaltung erforderte und mich dabei immer auf die Route oder den Abfragestring verließ.
- Der Komponentenlebenszyklus schien nicht sehr erweiterbar zu sein: Es wäre schwierig, ein komplexes Verhalten in einer Basisklasse hinzuzufügen (z. B. das Anzeigen eines Spinners, bevor der Inhalt geladen wird).
Die Dinge haben sich in 3.0 verbessert (Routenparameter werden jetzt dekodiert?), aber ich denke, dass die meisten Punkte immer noch wahr sind.
Ein paar Neuheiten für .NET Core 3.0:
- System.Text.Json ist der neue (Standard-)JSON-Serialisierer für Blazor. Allerdings ist es an den Rändern sehr rau. Die Nichtverfügbarkeit unveränderlicher Typen sofort zu deserialisieren ist ein echtes Problem. ? => Ich habe einen JsonConverter implementiert, um diesen speziellen Fall zu verwalten. Indem man sich auf die dynamische Codegenerierung verlässt, kann man einen Typ erstellen, den die neue API zur Deserialisierung akzeptiert, und dann den unveränderlichen Typ instanziieren.
- In Preview 8 müssen Blazor-Clientprojekte weiterhin auf .NET Standard 2.0 und nicht auf .NET Standard 2.1 abzielen.