【发布时间】: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