Ponte do mundo .NET para o mundo JavaScript

Quero compartilhar uma descoberta interessante - Bridge.net . Em poucas palavras, essa é uma estrutura que permite traduzir o código C # em JavaScript. A idéia que impulsiona a equipe de desenvolvimento é muito simples e direta - traduza a lógica o mais identicamente possível. O que agrada, se você se lembra de todas as diferenças e especificidades desses idiomas.



Talvez todos possam encontrar seu uso pessoal, mas eu gostaria de observar os momentos que me atraíram pessoalmente:

  • Possibilidade de aplicação para desenvolvimento móvel. JavaScript funciona em todas as plataformas
  • Montagem para Web. Especialmente se você precisar reescrever um projeto desatualizado, por exemplo, como um aplicativo SPA
  • Capacidade de reutilizar código C # simultaneamente no lado do servidor e do cliente
  • Tradução realizada durante a construção do projeto
  • O projeto está em desenvolvimento ativo, há suporte adequado dos desenvolvedores
  • Bridge.net é um projeto OpenSource com uma licença para uso comercial ( licença Apache 2.0 )

Como demonstração do uso do Bridge, quero compartilhar uma solução para a tarefa de validação de campo em um aplicativo Web. Espero que o exemplo seja ilustrativo, porque um problema semelhante pode ocorrer com bastante frequência. Para simplificar, usarei o ASP.NET Web Forms.

Portanto, temos um campo no qual o usuário deve digitar o número de registro do carro e clicar no botão No nosso caso, o botão verificará a correção da entrada (na vida real, podemos devolver, por exemplo, multas registradas).

Lógica do servidor de validação de entrada
protected void submitButton_OnClick(object sender, EventArgs e) { var isCorrect = IsCorrectPlateNumber(plateTextBox.Text); plateTextBox.BackColor = isCorrect ? Color.LightGreen : Color.Coral; } private static bool IsCorrectPlateNumber(string plateNumber) { var success = false; if (!string.IsNullOrWhiteSpace(plateNumber)) { plateNumber = plateNumber.Trim(); if (plateNumber.Length >= 8 || plateNumber.Length <= 9) { var rgx = new Regex(@"^[]\d{3}[]{2}\d{2,3}$"); success = rgx.IsMatch(plateNumber); } } return success; } 




Ok, agora queremos reduzir a carga no servidor e executar a validação de campo no lado do cliente. Existem várias opções:

1) Reescreva a validação do cliente , que verificará os cenários mais simples, por assim dizer, "proteção contra o tolo". As verificações básicas ainda serão realizadas no lado do servidor.

Validação simples do cliente
 .   ( X 000 XX 000):<br/> <asp:TextBox ID="plateTextBox" runat="server"/> <asp:Button ID="submitButton" runat="server" Text="" OnClientClick="return validatePlate();" OnClick="submitButton_OnClick"/> 

 function validatePlate() { var value = document.getElementById('<%=plateTextBox.ClientID%>').value; if (value && value.length) { return true; } alert(" .  !"); return false; } 


2) Validação do servidor de portabilidade , tanto quanto possível, repetindo o código. As vantagens são óbvias - a discrepância mínima entre os resultados da validação no servidor e no cliente. Também há desvantagens - repetindo a lógica do servidor, eu também gostaria de mantê-la em um estado ativo, o que pode causar dor de cabeça. Não vou reescrever o código manualmente, é bastante compreensível. Vamos ver melhor como o Bridge nos ajudaria. Para fazer isso, use o editor online . O código traduzido terá a seguinte aparência:

Validação completa do cliente
 (function (globals) { "use strict"; Bridge.define('Demo.ServerLogic', { statics: { isCorrectPlateNumber: function (plateNumber) { var success = false; if (!Bridge.String.isNullOrWhiteSpace(plateNumber)) { plateNumber = plateNumber.trim(); if (plateNumber.length >= 8 || plateNumber.length <= 9) { var rgx = new Bridge.Text.RegularExpressions.Regex("constructor", "^[]\\d{3}[]{2}\\d{2,3}$"); success = rgx.isMatch(plateNumber); } } return success; } } }); Bridge.init(); })(this); 

Resta incluir o arquivo Bridge.js (por uma questão de simplicidade, peguei o arquivo de script no editor on-line) e modificamos levemente nossa função de validação inicial:

 function validatePlate() { var value = document.getElementById('<%=plateTextBox.ClientID%>').value; if (Demo.ServerLogic.isCorrectPlateNumber(value)) { return true; } alert(" .  !"); return false; } 


3) Reutilize a lógica. Se quisermos mantê-lo atualizado, podemos configurar a tradução da validação de C # para JavaScript a ser executada sempre que o projeto for construído. Assim, a lógica realmente se torna reutilizável, os programadores não perdem tempo, o aplicativo se torna mais estável e os usuários ficam ainda mais felizes! Para fazer isso, você precisa executar várias etapas:

Incorporando o Bridge em um projeto
1. Crie um projeto WebApplication1.Bridge em uma solução existente

2. Instale o pacote Nuget nele. Instale este pacote em um projeto separado, como Durante a instalação, as referências conflitantes são excluídas.



3. No projeto WebApplication1 , colocaremos a lógica em um arquivo / classe separado. Portanto, agora essa classe será usada no manipulador de eventos de clique em botão (as alterações são claras, não forneço o código).

ServerLogic.cs
 using System.Text.RegularExpressions; namespace WebApplication1 { public class ServerLogic { public static bool IsCorrectPlateNumber(string plateNumber) { var success = false; if (!string.IsNullOrWhiteSpace(plateNumber)) { plateNumber = plateNumber.Trim(); if (plateNumber.Length >= 8 || plateNumber.Length <= 9) { var rgx = new Regex(@"^[]\d{3}[]{2}\d{2,3}$"); success = rgx.IsMatch(plateNumber); } } return success; } } } 


4. Adicione o arquivo criado ao projeto WebApplication1.Bridge como um link

5. Altere o diretório de saída do projeto WebApplication1.Bridge . Para fazer isso, configure o arquivo bridge.json :

 "output": "../WebApplication1/Scripts/Bridge" 

6. Após a montagem no Solution Explorer, clique em Show All Files e podemos ver o script gerado webApplication1.js

7. Adicione os links necessários e atualize os scripts na página Demo.aspx :

Scripts Demo.aspx
 <script src="Scripts/Bridge/bridge.js" type="text/javascript"></script> <script src="Scripts/Bridge/webApplication1.js" type="text/javascript"></script> <script type="text/javascript"> function validatePlate() { var value = document.getElementById('<%=plateTextBox.ClientID%>').value; if (WebApplication1.ServerLogic.isCorrectPlateNumber(value)) { return true; } alert(" .  !"); return false; } </script> 


8. É isso aí. Você pode criar um projeto e executar. Agora, qualquer alteração na lógica de validação funcionará automaticamente nas verificações do servidor e do cliente.

Portanto, com um exemplo simples, vimos como é possível reutilizar facilmente o código C #, mesmo quando você precisa fazer isso usando JavaScript. E o que pode ser de grande valor - como essa abordagem é incorporada no processo de desenvolvimento e construção de um aplicativo da Web. No entanto, essa não é a única vantagem do Bridge.net. Eu o vejo como um assistente incontestável no desenvolvimento móvel de plataforma cruzada, especialmente para aqueles que não conseguem imaginar sua vida sem o .NET, mas mais sobre isso na próxima vez!

Source: https://habr.com/ru/post/pt450990/


All Articles