【问题标题】:How to design : Defining a set of strategy(s) for each business rule如何设计:为每个业务规则定义一组策略
【发布时间】:2011-06-18 18:50:44
【问题描述】:

我正在使用 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。 现在我的要求是基于 Current Day 、一组实体的一些属性等,我有更多的条件可以发挥作用。 在每种情况下,我都需要按特定顺序使用处理器组合。 例如:

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 个适用。

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

这个想法是,如果明天要实施一个新的条件/规则 我可以将它与一组处理器和所需的顺序一起定义在某个地方......这是否可取?

非常感谢。

【问题讨论】:

    标签: c# rule-engine


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-12-17
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      相关资源
      最近更新 更多