我正在开发一个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适用。
什么是实现这个的最佳方式..我正在考虑实施一些 一种规则引擎..
这个想法是,如果明天要实施新的条件/规则 我可以将它与处理器集合以及所需的序列一起定义...这是可取的吗?
非常感谢。