2011-06-18 13 views
1

私は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が適用可能です。私はルールエンジンの一部 種類の実装を見ていた

最良の方法はこれを実現するためにいただきました..

アイデアは、新しい条件/ルールが を実装する明日場合、私は定義することができることですそれはどこかのプロセッサーとシーケンスが必要です...これはお勧めですか?

ありがとうございます。

答えて

関連する問題