Como o uso de um mecanismo de regras afeta o design, implementação e desempenho de um aplicativo?

11

Estou interessado na capacidade dos mecanismos de regras de:

  • iniciar e iterar sobre a lógica orientada aos negócios
  • ter "usuários de negócios" realizando a modificação real dessas regras em vez de desenvolvedores
  • compreender as regras de negócios em geral

Além disso, o uso de um mecanismo de regras afeta a qualidade de um aplicativo?

O uso de um mecanismo de regras muda se você estivesse implementando uma configuração de uma máquina em comparação à sua arquitetura versus uma arquitetura distribuída baseada em nuvem de várias camadas usando milhares de máquinas? Como seria diferente?

enonu
fonte

Respostas:

5

A decisão de expor uma interface para o pessoal não técnico modificar as regras de negócios depende em grande parte de vários fatores, incluindo os objetivos do projeto, o custo do projeto, a vida útil do projeto e a proporção de conhecidos e desconhecidos no projeto.

Por exemplo, se eu acreditasse que ninguém usaria a interface de regras, provavelmente optaria por não implementá-la. No entanto, se eu tivesse motivos para acreditar que as mudanças seriam frequentes e que diferentes usuários finais esperariam que regras diferentes fossem implementadas, consideraria trabalhar na criação dessa funcionalidade.

Eu escolhi fazer isso em um projeto e levou anos para que o recurso fosse amplamente utilizado. Eu suspeitava que eventualmente teríamos usuários finais que desejariam personalizar as coisas, então implementamos essa funcionalidade em partes.

Tudo começou como algo que somente certas pessoas, como desenvolvedores ou administradores, poderiam usar. A interface era desajeitada, mas utilizável se você soubesse o que estava fazendo. Porém, quando o produto estava quase completo, a lógica de back-end do mecanismo de regras foi útil e nossa equipe de design ofereceu uma interface de usuário bonita e voltada para o cliente.

Se eu fosse diferente, poderia escolher uma arquitetura de banco de dados diferente apenas porque a curva de aprendizado é alta. Mas, resumindo, construí-lo cedo levou a muitos recursos voltados para o cliente mais tarde, sem as dores de cabeça de ter que voltar no código e refatorá-lo para incluir todas as regras dinâmicas.

jmort253
fonte
1
Eu acrescentaria que os usuários de negócios esperam gastar tempo para aprender a interface de regras. A interface será mais fácil para os usuários usarem, mas definitivamente levará tempo e esforço para aprender. Eles não devem esperar algo magicamente compreensível.
9000
@ 9000 - Ponto muito bom. Eu já vi isso em meus próprios projetos. De fato, muitas vezes ainda envolve treinamento para atualizar os usuários, bem como um certo aspecto de 'vender' a interface para os usuários e mostrar o valor que eles têm para eles.
jmort253
4

Se eu fizesse isso, criaria uma linguagem específica de domínio para expressar as regras e talvez fornecer aos tipos de negócios uma interface do usuário para modificá-la, se solicitado. Em seguida, use uma linguagem funcional (como Haskell, Lisp ou Erlang) para avaliar as regras.

Se fosse necessário um paralelismo maciço, eu iria com Erlang, que faz concorrência muito bem. O uso do Erlang escalaria bem de 1 nó a 100 ou mais.

Se você pensa nas regras como uma Álgebra que será aplicada a um conjunto de dados, fica muito mais fácil descobrir o que é necessário em seu código e provar a si mesmo (ou a seus gerentes) que está correto. Este é um daqueles lugares onde uma linguagem funcional funcionará a seu favor.

Zachary K
fonte
3

Eu escrevi um aplicativo baseado no WF (Windows Workflow Foundation). Meu chefe (um DBA) estava convencido de que o WF poderia executar multi-threading sem a necessidade de planejar a simultaneidade. A memória foi completamente dividida, mas havia tantos problemas que não consigo explicar em apenas alguns parágrafos e isso é apenas um pouco relacionado à sua pergunta ... então continuo.

Capacidade de iterar BL:
WF faz isso bem.
permita que os não-técnicos "construam um aplicativo": o
WF faz isso bem SE a arquitetura funciona E os não-técnicos entendem as limitações técnicas ... O nosso não.
Capacidade de compreender as regras de negócios em geral:
existem alguns suplementos que podem fazer algumas coisas básicas, como o sharepoint pode automatizar fluxos de trabalho. Eu não entrei nesses itens.
Qualidade das versões de software:
Medíocre. O WF não teve um bom desempenho para nossos propósitos, mas o sistema foi mal projetado e minhas mãos estavam atadas.
Velocidade de aplicações:
Lento. A curva de aprendizado é bastante acentuada para desenvolvedores e usuários finais. A maneira como a WF separou a memória (domínios de aplicativos, se bem me lembro) fez com que a comunicação entre threads, mutexes e outros conceitos de segmentação parecessem obscuros ou simplesmente não funcionassem.

Por fim, escrevi um protótipo para provar que o WF falha na maneira como foi implementado. Substituí-o por multi-threading comum. O desempenho e a legibilidade do código aumentaram. Leve isso com um grão de sal, pois esta foi minha primeira aplicação profissional de WF.

As empresas não-tecnológicas podem acreditar que praticamente tudo é possível sem a necessidade de programador, um negativo potencialmente grande para todo o "dummy down" do BL; problemas sociológicos relacionados a isso mataram o projeto.

Se eu pudesse voltar e fazer do meu jeito : use a segmentação tradicional e a moldagem BL obtida pelo Decorator Pattern. Eu escrevi uma prova de conceito que usava essas tecnologias e funcionou bem. E o mapeamento BL deve ser agrupado em uma interface simples.
Atualização
Encontrei um post antigo que escrevi ao trabalhar com problemas de simultaneidade. O código mostra como a impressão do "hello world" em fluxos de trabalho paralelos não funciona sem a compreensão do que acontece por baixo das capas (o que derrota todo o objetivo da abstração do WF). O moderador do MSDN explica uma visão geral de alto nível de como as atividades paralelas são realmente sequenciais. Ele conclui com basicamente "você precisa ler o manual inteiro" para fazer algo tão básico. http://social.msdn.microsoft.com/Forums/en/windowsworkflowfoundation/thread/8a1fa165-ad5c-4cd2-b489-7ea5fc31fed8

Boa sorte.

P.Brian.Mackey
fonte
Eu tenho nenhuma experiência com WF, mas sempre fiquei longe dela, porque meu instinto era para fazer isso. Mas não posso deixar de pensar: se o WinWF não é apenas uma versão retardada de um sistema ETL, como o Rhino ETL, em termos do que pode ser feito com a mesma facilidade?
Henrik
3

Eu tive uma experiência menos do que perfeita ao conectar o código Java a um mecanismo de regras Oracle. Parte disso pode ser devido à inexperiência por parte dos autores das regras, mas é isso que eu enfrentei.

  • Implementamos nosso mecanismo de regras como um dispositivo sem estado. O chamador teve que reunir todos os parâmetros e passá-los ao mecanismo para avaliação. Isso significava que, se a regra precisava de outro campo de dados, todos os clientes precisavam ser atualizados. Isso negava a vantagem de poder atualizar as regras independentemente de seus consumidores.
  • O mecanismo publicou um WSDL SOAP, mas foi gerado automaticamente a partir do conjunto de regras. Pequenas alterações nas regras violariam o contrato com os consumidores.
  • O mecanismo foi bom em avaliar as regras, mas péssimo em nos dizer por que a avaliação falhou. Era difícil enviar mensagens de erro informativas ao usuário.
  • O WSDL não era adequado para consumo geral. O conjunto de regras mais simples possuía um WSDL de 14 páginas, que expunha os internos da base de regras. Tivemos que colocar uma camada de tradução SOA na frente para apresentar uma fachada favorável aos negócios. Portanto, em vez de chamar uma biblioteca local 100% confiável, havia dois servidores extras no circuito. Isso não aumenta a confiabilidade, no mínimo. Além disso, qualquer alteração na assinatura da regra envolvia três equipes diferentes, atualizando o código. Não é minha definição de ágil!
  • Sempre que o conjunto de regras necessitasse de adições, o WSDL precisaria ser atualizado, o que significava que os clientes não o entendiam mais. Isso levou à adição de novos pontos de extremidade SOAP para v2, v3 .. que tiveram efeitos indiretos de exigir a atualização das regras de firewall.
  • As regras foram expressas em "inglês estruturado", que era facilmente compreensível para regras simples, mas quase opaco para regras complexas.
  • Nunca foi possível encontrar empreiteiros que conheciam as regras de criação de linguagem.
  • A linguagem das regras não implementou matrizes, recursão ou orientação a objetos. Em um caso, a única maneira de implementar uma regra era através de uma chamada para uma planilha do Excel, onde a regra foi implementada no VB. Porque se importar?

Eu não acho que a escolha de usar um mecanismo de regras (ou não) seja clara. Sugiro que você faça o protótipo de qualquer mecanismo que pretenda usar e tome uma decisão informada. Eles certamente não são uma bala de prata ...

kiwiron
fonte