Sou um grande fã dos Business Rules Engines, pois podem ajudá-lo a tornar sua vida muito mais fácil como programador. Uma das primeiras experiências que tive enquanto trabalhava em um projeto de Data Warehouse foi encontrar Stored Procedures contendo estruturas CASE complicadas estendendo-se por páginas inteiras. Depurar foi um pesadelo, já que era muito difícil entender a lógica aplicada em estruturas CASE tão longas e determinar se havia uma sobreposição entre uma regra na página 1 do código e outra na página 5. No geral, tivemos mais de 300 dessas regras embutidas no código.
Quando recebemos um novo requisito de desenvolvimento, para algo chamado Destino Contábil, que envolvia o tratamento de mais de 3.000 regras, eu sabia que algo tinha que mudar. Naquela época, eu estava trabalhando em um protótipo que mais tarde se tornou o pai do que agora é um mecanismo de Regras de negócios personalizadas, capaz de lidar com todos os operadores padrão SQL. Inicialmente utilizamos o Excel como ferramenta de autoria e, posteriormente, criamos um aplicativo ASP.net que permitirá aos Usuários de Negócios definirem suas próprias regras de negócio, sem a necessidade de escrever código. Agora o sistema funciona bem, com pouquíssimos bugs, e contém mais de 7000 regras para o cálculo deste Destino Contábil. Não acho que tal cenário seria possível apenas com a codificação permanente.
Ainda assim, há limites para essa abordagem:
- Você precisa ter usuários de negócios capazes, que tenham um excelente conhecimento dos negócios da empresa.
- Há uma carga de trabalho significativa na busca de todo o sistema (no nosso caso, um Data Warehouse), a fim de determinar todas as condições embutidas em código que fazem sentido traduzir em regras a serem tratadas por um Business Rule Engine. Também tivemos que tomar cuidado para que esses modelos iniciais fossem totalmente compreensíveis pelos usuários de negócios.
- Você precisa ter um aplicativo usado para criação de regras, no qual algoritmos para detecção de regras de negócios sobrepostas sejam implementados. Caso contrário, você acabará em uma grande confusão, onde ninguém mais entende os resultados que obtém. Quando você tem um bug em um componente genérico, como um Custom Business Rule Engine, pode ser muito difícil depurar e envolver testes extensivos para garantir que as coisas que funcionavam antes também funcionem agora.
Mais detalhes sobre este tópico podem ser encontrados em uma postagem que escrevi: http://dwhbp.com/post/2011/10/30/Implementing-a-Business-Rule-Engine.aspx
No geral, a maior vantagem de usar um Mecanismo de regra de negócios é que ele permite que os usuários retomem o controle sobre as definições e a criação de regras de negócios, sem a necessidade de ir ao departamento de TI toda vez que precisarem modificar algo. Isso também reduz a carga de trabalho das equipes de desenvolvimento de TI, que agora podem se concentrar na construção de coisas com mais valor agregado.
Felicidades,
Nicolae