Юникод-браузер
Веб-приложение Blazor C# для просмотра базы данных символов Юникода.
Приложение размещено здесь: https://unicode-browser.azurewebsites.net/home.
Функции
- Разложить текст по кодовым точкам Юникода.
- Просмотр подробной информации о кодовой точке.
- Просмотрите точки кода в данном блоке Юникода.
- Найдите любого персонажа по имени.
- Отображать дополнительную информацию (в формате Markdown) на страницах, посвященных блокам Юникода.
Попробуйте это
Вот несколько URL-адресов, которые вы можете попробовать, чтобы увидеть приложение в действии:
- 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
Основные используемые технологии
- ASP.NET Core 3.0 (.NET Core 3.0.0-preview8.19405.7)
- Блазор
- Маркдиг 0.17.1
- Бутстрап 4.1
- Шрифт Awesome 5.0.10
- jQuery 3.3.1 (поскольку Bootstrap JS все еще требует этого)
Ссылки на документацию
Документация Blazor доступна на docs.microsoft.com.
Предыстория
Большая часть этого приложения была первоначально написана еще в начале 2016 года с использованием предварительной версии ASP.NET Core, TypeScript и Aurelia. В то время это был повод узнать об этих самых новых фреймворках, и это отлично сработало.
Исходный код текущей версии по большей части представляет собой простую адаптацию раннего прототипа. Фактически большая часть серверного кода была просто перенесена на ASP.NET Core 2.1 с очень небольшими изменениями.
Однако самое интересное было в клиентской части, поскольку повторно можно было использовать только части HTML. (И все равно требовался переход на Bootstrap 4/Fontawesome 5). Это снова был отличный повод протестировать и научиться использовать Blazor, а также быть в курсе других технологий.
Ошибки
Blazor — это совершенно новая технология, которая все еще находится на ранней стадии предварительной версии, и иногда с ней бывает сложно справиться.
Из-за этого я обнаружил, что натыкаюсь на вещи, которые, как мне казалось, были тривиальными, и чувствую, что мне пришлось написать много шаблонного кода, чтобы заставить эти вещи работать.
например
* Я был очень разочарован тем, что не смог разделить свои классы модели между сервером и клиентом, поскольку Blazor в настоящее время использует SimpleJson, который сильно ограничен. ? (И, к сожалению, Newtonsoft.Json, похоже, пока работает недостаточно хорошо. ?)
- Привязку к параметрам строки запроса необходимо выполнять вручную.
- Страницам иногда необходимо вручную прослушивать изменения местоположения (например, изменения URL-адреса на той же странице).
- Управление состоянием «из коробки» отсутствует. (например, что происходит, когда вы перемещаетесь вперед и назад по истории) => Я решил эту проблему, вообще не требуя управления состоянием и всегда полагаясь для этого на маршрут или строку запроса.
- Жизненный цикл компонента не казался очень расширяемым: было бы сложно добавить сложное поведение в базовый класс (например, отображение счетчика перед загрузкой контента).
В версии 3.0 ситуация улучшилась (параметры маршрута теперь декодированы?), но я думаю, что большинство пунктов по-прежнему остаются верными.
Несколько новинок .NET Core 3.0:
- System.Text.Json — это новый сериализатор JSON (по умолчанию) для Blazor. Однако края очень грубые. Невозможность десериализации неизменяемых типов «из коробки» — это настоящая боль. ? => Я реализовал JsonConverter для управления этим конкретным случаем. Полагаясь на генерацию динамического кода, можно создать тип, который новый API примет для десериализации, а затем создать экземпляр неизменяемого типа.
- В предварительной версии 8 клиентские проекты Blazor по-прежнему должны ориентироваться на .NET Standard 2.0, а не на .NET Standard 2.1.