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
IWorkflow instead of Workflow
- Use
IRule instead of Rule
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.
Proposal for Interface Update
Objective:
Allow users to implement their own workflows and rules by updating method signatures in
IRulesEngine.csto use interfaces.Current Issue:
Method signatures use
WorkflowandRuleclasses directly, limiting extensibility.Proposed Changes:
IWorkflowinstead ofWorkflowIRuleinstead ofRuleExample Changes:
Current:
Proposed:
Extending Rule Example:
Current Rule Class:
Extended Rule Interface and Class for Generic Business Scenario:
Interface:
Custom Rule Implementation:
Usage in Business:
In a business scenario, a rule might need a
Categoryproperty to classify rules into different segments like "Financial", "Operational", or "Compliance". This helps in organizing and managing rules more effectively.Proposed IRulesEngine Changes:
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.