Repository navigation
Proposal for Interface Update #49
Description
Proposal for Interface Update
Objective:
Allow users to implement their own workflows and rules by updating method signatures in IRulesEngine.cs to use interfaces.
Current Issue:
Method signatures use Workflow and Rule classes directly, limiting extensibility.
Proposed Changes:
- Change Method Signatures:
- Use
IWorkflowinstead ofWorkflow - Use
IRuleinstead ofRule
- Use
Example Changes:
Current:
Task<List<RuleResultTree>> ExecuteAllRulesAsync(string workflowName, List<Workflow> workflows);
void AddRule(string workflowName, Rule rule);Proposed:
Task<List<RuleResultTree>> ExecuteAllRulesAsync(string workflowName, List<IWorkflow> workflows);
void AddRule(string workflowName, IRule rule);Extending Rule Example:
Current Rule Class:
public class Rule
{
public string RuleName { get; set; }
public string SuccessEvent { get; set; }
public string ErrorMessage { get; set; }
public string Expression { get; set; }
public RuleExpressionType RuleExpressionType { get; set; }
public Dictionary<string, object> Properties { get; set; }
}Extended Rule Interface and Class for Generic Business Scenario:
Interface:
public interface IRule
{
string RuleName { get; set; }
string SuccessEvent { get; set; }
string ErrorMessage { get; set; }
string Expression { get; set; }
RuleExpressionType RuleExpressionType { get; set; }
Dictionary<string, object> Properties { get; set; }
string Category { get; set; } // New property example
}Custom Rule Implementation:
public class CustomRule : IRule
{
public string RuleName { get; set; }
public string SuccessEvent { get; set; }
public string ErrorMessage { get; set; }
public string Expression { get; set; }
public RuleExpressionType RuleExpressionType { get; set; }
public Dictionary<string, object> Properties { get; set; } = new Dictionary<string, object>();
// New property
public string Category { get; set; }
}Usage in Business:
In a business scenario, a rule might need a Category property to classify rules into different segments like "Financial", "Operational", or "Compliance". This helps in organizing and managing rules more effectively.
Proposed IRulesEngine Changes:
Task<List<RuleResultTree>> ExecuteAllRulesAsync(string workflowName, List<IWorkflow> workflows);
void AddRule(string workflowName, IRule rule);This change allows users to define custom rules with additional properties, such as categorization, enhancing the flexibility and applicability of the rules engine to real-world business scenarios.
Activity
asulwer commentedon Jul 8, 2024
sounds great!