Pare a lógica de negócios de codificação: encontre o mecanismo de regra JS

Índice Você já se encontrou enterrado em declarações de IF-Else aninhadas, tentando implementar regras de negócios complexas que mudam a cada duas semanas? Ou pior, assistiu sua base de código limpa se transformar em um pesadelo de manutenção porque a lógica de negócios estava espalhada por dezenas de arquivos? Eu estive lá. E foi exatamente por isso que construí o mecanismo de regras JS. O problema que iniciou tudo: você está construindo uma plataforma de comércio eletrônico e a equipe de negócios chega a você com requisitos “simples”: os clientes VIP recebem descontos em pedidos acima de US $ 100 clientes regulares precisam de mais de 1000 pontos de fidelidade para descontos pela primeira vez que os clientes recebem 20% de desconto em pedidos acima de US $ 50, mas apenas durante o horário comercial, a menos que seja um fim de semana ou um feriado e as regras do mês seguinte … o som familiar? 😅 O verdadeiro kicker veio quando eles disseram: “Ah, e precisamos armazenar essas regras no banco de dados para que possamos atualizá -las sem implantar”. Foi quando percebi que precisava de algo que pudesse lidar com a lógica de negócios da JSON-Serializable sem sacrificar a experiência ou o desempenho do desenvolvedor. Digite o Regra Engine JS depois de experimentar soluções existentes e encontrá -las muito complexas, muito lentas ou sem recursos importantes, decidi construir algo melhor. Aqui está o que torna o mecanismo de regra JS diferente: 🚀 Dependências zero, desempenho máximo sem árvores de dependência inchada. Sem vulnerabilidades de segurança de pacotes de terceiros. Apenas JavaScript limpo e eficiente que funciona em todos os lugares: importar {CreateruleenGine, CreateruleHelpers} de ‘regras-motor-js’; const mecanismo = createruleenGine (); const regras = createruleHelpers (); // É isso. Você está pronto para ir. Digite o modo de tela cheia de saída do modo de tela cheia 🎯 Experiência do desenvolvedor que realmente faz sentido lembrar -se das regras JSON aninhadas que fazem seus olhos sangrarem? Não aqui: // em vez deste pesadelo: const regra = {“e”: [
{ “gte”: [“user.age”, 18] }, {“eq”: [“user.status”, “active”] }, { “em”: [“write”, “user.permissions”] }]} // Escreva isto: const regra = regras.and (regras.gte (‘user.age’, 18), regras.eq (‘user.status’, ‘ativo’), regras.in (‘write’, ‘user.permissions’)); Digite o modo de saída do modo de tela cheia, ambos compilam com o mesmo JSON (perfeito para armazenamento de banco de dados), mas apenas um é realmente mantido. Comparação dinâmica de campo (o divisor de águas) Aqui é onde as coisas ficam interessantes. Precisa comparar campos dentro de seus dados? A maioria dos motores de regras faz você pular através de aros. O mecanismo de regra JS o torna natural: const OrderValidation = regras.and (regras.field.lessthan (‘order.total’, ‘user.creditlimit’), regras.field.equals (‘order.currency’, ‘user.PreferredCurrency’), regras.gte (‘user. user.countage’, 30) / dias); Digite o modo de saída do modo de tela cheia, esse era o recurso que eu precisava desesperadamente para o meu projeto original – e agora ele está construído. regras.gte (‘Customer.LoyaltyPoints’, 1000), // Bonus do cliente pela primeira vez. // Posteriormente, quando as regras de negócios mudam: const atualizaRules = Aguarda Database.getRules (‘Elegibilidade com desconto’); const resultado = mecanismo.EvaluateExpr (UpdatedRules, CustomerData); Digite Modo de tela completa Sair modo de tela cheia sem implantações. Nenhuma alteração de código. Basta atualizar o banco de dados e terminar. Validação do formulário fez const simples formalidação = regras. // Retorna resultados de validação detalhados const resultado = mecanismo.evaluatexpr (formalidação formal, formData); if (! result.success) {console.log (‘Validação falhou:’, resultado.error); } Digite o modo de tela fullcreen Sair da tela cheia Modo de acesso ao usuário Controle de controle de const AccessRule = regras.and (regras.istrue (‘user.isactive’), regras.or (regras.eq (‘user.role’, ‘admin’), regras.and (regras.eq (‘user.department’, ‘userce.department’), regras.in (‘eq (‘user.department’, ‘resource.department’), regras.in (‘eq ”; // Perfeito para middleware app.get (‘/api/sensível-data’, (req, res, o próximo) => {const hasAccess = Engine.EvaluateExpr (accessRule, {user: req.user, Recurso: {departamento: ‘finance’}}); }); Digite o modo de saia completa do modo de tela cheia construída para o desempenho da produção que escala o cache inteligente de LRU para avaliações repetidas em cache de resolução de caminho para acesso ao padrão de acesso a objetos aninhados para regras de validação para validação tipicamente em 1ms Avaliação de tempo de avaliação de tempo prevendo a proteção contra controvatórios da poluição da poluição da poluição (sem execução da função) = mecanismo.getMetrics (); console.log ({avaliações: métricas. Digite o modo de tela completa Sair da estrutura de tela cheia Framework AGNOSTIC, esteja você usando o React, Vue, Express, Next.js ou Javascript – REGS MENOR JS Just funciona: // ReaT Função UseruleValidation (Regras, Dados) {Return useememo (() => mecany.evaluatexpr (regras, dados), { [rules, data]
); } // Express Middleware const CreateAcCessMiddleware = (regra) => (req, res, seguinte) => {const resultado = mecany.evaluateExpr (regra, req.user); resultado.Success? próximo (): res.status (403) .nd (); }; // Propriedade computada Vue calculada: {iseligible () {return mecan }} Digite o modo de tela fullcreen Sair const mecanismo = createruleenGine (); const regras = createruleHelpers (); // sua primeira regra const canaccess = regras.and (regras.gte (‘user.age’, 18), regras.eq (‘user.status’, ‘ativo’)); // Teste, const resultado = mege.EvaluateExpr (Canaccess, {User: {Age: 25, Status: ‘Active’}}); console.log (resultado.success); // TRUE Digite o modo de saída de tela cheia de tela cheia. Sem arquivos de configuração, sem configuração complexa – basta limpar o código de trabalho. Why I Think You’ll Love It After using Rule Engine JS in production for several months, here’s what I appreciate most: It stays out of your way – Simple API, predictable behavior Debugging is actually pleasant – Clear error messages and built-in logging Performance is transparent – See exactly how your rules are performing Security is handled – Protection against common attacks built-in It scales with your needs – From simple validation to complex business logic What’s Next? Estou trabalhando ativamente no Rule Engine JS e adoraria seu feedback. Esteja você lidando com regras de negócios complexas, validação de formulários ou controle de acesso – tente e deixe -me saber o que você pensa. ⭐ Estrela O repositório: github.com/crafts69guy/rule-engine-js📦 Experimente agora: NPM Instale a regra-mecanismo-js📚 Docs completos: guias e exemplos abrangentes incluídos🐛 problemas: encontrou um bug ou tem uma solicitação de recurso? Eu adoraria ouvir de você! O ROGE MOTEM JS é licenciado pelo MIT e possui zero dependências. Funciona no Node.js 16+ e em todos os navegadores modernos. Construído por desenvolvedores, para desenvolvedores que estão cansados de codificar a lógica de negócios.

Fonte

Publicar comentário

Você pode ter perdido