Navegador Unicode
Um aplicativo da web Blazor C# para navegar no banco de dados de caracteres Unicode.
O aplicativo está hospedado lá: https://unicode-browser.azurewebsites.net/home
Características
- Decomponha o texto em pontos de código Unicode.
- Visualize informações detalhadas sobre um ponto de código.
- Procure pontos de código em um determinado bloco Unicode.
- Pesquise qualquer personagem pelo nome.
- Exiba informações adicionais (em formato Markdown) em páginas dedicadas a blocos Unicode.
Experimente
Aqui estão alguns URLs que você pode experimentar para ver o aplicativo em ação:
- https://unicode-browser.azurewebsites.net/blocks/Miscellaneous%20Symbols%20and%20Pictographs
- https://unicode-browser.azurewebsites.net/codepoints/1F365
- https://unicode-browser.azurewebsites.net/search?q=Árvore
- https://unicode-browser.azurewebsites.net/decomposition?text=????????
- https://unicode-browser.azurewebsites.net/blocks/Tangut
- https://unicode-browser.azurewebsites.net/blocks/Tags
Principais tecnologias utilizadas
- ASP.NET Core 3.0 (.NET Core 3.0.0-preview8.19405.7)
- Blazor
- Markdig 0.17.1
- Inicialização 4.1
- Fonte incrível 5.0.10
- jQuery 3.3.1 (porque o Bootstrap JS ainda parece exigir isso)
Links de documentação
A documentação do Blazor está disponível em docs.microsoft.com.
História de fundo
A maior parte deste aplicativo foi originalmente escrita no início de 2016, usando uma versão prévia do ASP.NET Core, TypeScript e Aurelia. Na época, esta foi uma ocasião para aprender sobre essas novas estruturas e funcionou muito bem.
O código-fonte da versão atual é principalmente uma adaptação direta do protótipo inicial. Na verdade, a maior parte do código do servidor foi simplesmente portada para o ASP.NET Core 2.1 com pouquíssimas modificações.
A parte do cliente, entretanto, era onde estava a "diversão", já que apenas as partes HTML eram reutilizáveis. (E ainda exigiu uma migração para Bootstrap 4 / Fontawesome 5) Esta, novamente, foi uma ótima ocasião para testar e aprender como usar o Blazor, além de se manter atualizado com as demais tecnologias.
Pegadinhas
Blazor é uma tecnologia muito nova, ainda em fase de pré-visualização, e às vezes pode ser difícil de lidar.
Por causa disso, me deparei com coisas que pensei que seriam triviais e sinto que tive que escrever muitos códigos padronizados para fazer essas coisas funcionarem.
por exemplo
* Fiquei bastante desapontado por não poder compartilhar minhas classes Model entre o Servidor e o Cliente, pois o Blazor atualmente usa SimpleJson, que é extremamente limitado. ? (E, infelizmente, Newtonsoft.Json não parece funcionar bem o suficiente por enquanto.?)
- A vinculação aos parâmetros da string de consulta deve ser feita manualmente
- Às vezes, as páginas precisam escutar manualmente as alterações de localização (por exemplo, alterações de URL na mesma página)
- Não existe gestão estatal pronta para uso. (por exemplo, o que acontece quando você avança e retrocede no histórico) => Resolvi isso não exigindo nenhum gerenciamento de estado e sempre contando com a rota ou string de consulta para isso.
- O ciclo de vida do componente não parecia ser muito extensível: seria difícil adicionar um comportamento complexo em uma classe base (por exemplo, exibir um botão giratório antes do conteúdo ser carregado).
As coisas melhoraram no 3.0 (os parâmetros de rota agora estão decodificados?), Mas acho que a maioria dos pontos ainda permanece verdadeira.
Algumas novidades para o .NET Core 3.0:
- System.Text.Json é o novo serializador JSON (padrão) para Blazor. No entanto, é muito áspero nas bordas. A indisponibilidade para desserializar tipos imutáveis prontos para uso é uma verdadeira dor. ? => Implementei um JsonConverter para gerenciar este caso específico. Contando com a geração dinâmica de código, pode-se criar um tipo que a nova API aceitará para desserializar e, em seguida, instanciar o tipo imutável.
- Na Visualização 8, os projetos do cliente Blazor ainda precisam ser direcionados ao .NET Standard 2.0 e não ao .NET Standard 2.1.