可扩展的业务逻辑规则

本文关键字:规则 业务 可扩展的 | 更新日期: 2023-09-27 17:56:19

我正在寻找一种方法来创建可扩展的销售订单项目,以便在该项目中轻松附加新的业务规则。

public class OrderLine
{
    public int OrderId { get; set; }
    public int Line { get; set; }
    public string Product { get; set; }
    public string Description { get; set; }
    public decimal Quantity { get; set; }
    public int LeadTimeDays { get; set; }        
    public DateTime ShipDate { get; set; }
}

创建业务规则以检查订单行是否有效的最佳实践是什么? 而且,有没有一种简单的方法可以应用多个规则而无需为每个规则添加检查方法?

public static class OrderLineChecks
{
    public static void CheckLeadTime(this OrderLine orderLine)
    {
        if( (orderLine.ShipDate - DateTime.Today).TotalDays < orderLine.LeadTimeDays )
            throw new Exception("Order is within lead time.");
    }
    public static void CheckShipDateError(this OrderLine orderLine)
    {
        if(orderLine.ShipDate < DateTime.Today)
            throw new Exception("Ship date cannot be before today.");
    }
    public static void ShouldBeOrderedInPairs(this OrderLine orderLine)
    {
        if(orderLine.Description.Contains("pair") && (orderLine.Quantity % 2 !=0))
            throw new Exception("Quantities must be even numbers.");
    }
    public static NextFutureRuleHere(...)
    {
    }
}

感谢您的建议。

可扩展的业务逻辑规则

查看 Fluent Validation: http://fluentvalidation.codeplex.com/

遵循此框架如何实现规则应该可以帮助您确定我认为您正在寻找的内容。

根据您的要求,这可能是矫枉过正,但是您是否考虑过使用Rhino DSL和Boo编写DSL。 如果您编写正确,即使是非程序员也很容易扩展/维护一组业务规则。