如何设计:为每个业务规则定义一组策略

时间:2011-06-18 18:50:45

标签: c# rule-engine

我正在开发一个Windows服务来处理一批记录。 在这里,我有一组处理器来处理基于一组条件的记录。 所以我有一个看起来像这样的Engine类:

public interface IProcessor
{         
    ICollection<OutputEntity> Process(ICollection<InputEntity>> entities);
    string SomeField{get;set;}
}


public class Engine
{
    public Engine(IEnumerable<IProcessor> processors)
    {
        //asign the processors to local variable
    }

    public void ProcessRecords(IService service)
    {
        // getRecords code etc.
        foreach(var processor in processors)
        {
            processor.Process(typeRecords.Where(typeRecord => typeRecord.SomeField == processor.SomeField));
        }
    }
}

这是基于我前一段时间发布的另一个问题here。 现在我的要求是我有一些更多的条件基于当前日期,一组实体的一些属性等发挥作用。 在每种情况下,我都需要按特定顺序使用处理器组合。 例如:

if (( DateTime.Now.Date.DayOfWeek == DayOfWeek.Monday) && (inputEntityInstance.Property1 == "X" ))
            {
                Processor1.Process(inputEntityInstance);
                Processor2.Process(inputEntityInstance);
                Processor3.Process(inputEntityInstance):
            }

            if (( IsLastDayOfMonth() && (inputEntityInstance.Property2 == "Y" ))
            {
                Processor1.Process(inputEntityInstance);
                Processor4.Process(inputEntityInstance);
                Processor6.Process(inputEntityInstance):
            }

\

然而,我现在的情况是我有大约10种类型的处理器。 对于任何给定条件,大约3或4适用。

什么是实现这个的最佳方式..我正在考虑实施一些 一种规则引擎..

这个想法是,如果明天要实施新的条件/规则 我可以将它与处理器集合以及所需的序列一起定义...这是可取的吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

按规范模式封装条件。在相关流程之前运行。 http://en.wikipedia.org/wiki/Specification_pattern