私はWindowsサービスを使ってレコードのバッチを処理しています。 これでは、一連の条件に基づいてレコードを処理する一連のプロセッサがあります。 だから私はこのようなものに見えるエンジンのクラスがあります。デザイン方法:ビジネスルールごとに戦略のセットを定義する
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が適用可能です。私はルールエンジンの一部 種類の実装を見ていた
最良の方法はこれを実現するためにいただきました..
アイデアは、新しい条件/ルールが を実装する明日場合、私は定義することができることですそれはどこかのプロセッサーとシーケンスが必要です...これはお勧めですか?
ありがとうございます。