2013-06-14 3 views
4

다음과 같은 상황을 처리 할 수있는 엔진을 찾고 있습니다.간단한 규칙 엔진?

고객 개체가 첨부 된 주문 개체가 있습니다.
규칙 :
order.customer.id = 186의 경우 order.industry = 23 다음 order.price =

(100) 내가 NxBRE를 찾았지만이 잔인한 것 같다?

다른 사람들이 이와 같은 상황에 대해 무엇을하고 있습니까? 그냥 하드 코드하거나 Eval을 사용합니까?

답변

3

약 2 년 전이 딜레마에 빠져 들었습니다. 충분히 단순하고 무언가 이상한 일이 아니었기 때문에 시간을 제한하면 맞춤 해석 로직을 사용하여 무언가를 만들었습니다. =,>, 등, 규칙 평가 엔진

의 기지로 Linq에 전략 패턴을 사용하여

당신이 알고있는 경우 Windows 워크 플로 파운데이션, 그때 분명히 you can leverage its rules engine without having to actually use WF

+0

방금 ​​시도했습니다. 완벽한 솔루션처럼 보입니다! – Remy

1

나는 또한 비슷한 상황과 내 자신을 구축하는 생각을 가로 질러왔다 있지만 엔진을 사용하는 대신 현재의 논리를 변경하거나 새로운 근거로 진행할 때 큰 고통이 될 수 있기 때문입니다. 우리가 엔진의 작동 원리를 알게되면 어떤 논리와 최선의 방법으로도 개방적입니다. 우리는 지역 및 글로벌 최적을 찾기위한 솔루션을 구축 할 수 있습니다!

숟가락이 엔진을 공급하고 내 새 엔진을 만드는 데 도움이되는 링크를 아래에서 참조하십시오! 당신이 훨씬 간단 버전을 찾고 같은 코드를 작성하고자하는 경우

Click here for start up

+0

위대한 구현을 보인다. 나는 미래에 내 엔진을 향상시키기 위해 그것을 사용할지도 모른다. – Dib

0

...

[TestMethod] 
    public void GreaterThanRule_WhenGreater_ResultsTrue() 
    { 
     // ARRANGE 
     int threshold = 5; 
     int actual = 10; 

     // ACT 
     var integerRule = new IntegerGreaterThanRule(); 
     integerRule.Initialize(threshold, actual); 

     var integerRuleEngine = new RuleEngine<int>(); 
     integerRuleEngine.Add(integerRule); 
     var result = integerRuleEngine.MatchAll(); 

     // ASSERT 
     Assert.IsTrue(result); 
    } 

... 나 같은 ...

[TestMethod] 
public void GreaterThanRule_WhenGreater_ResultsTrue() 
{ 
    // ARRANGE 
    int threshold = 5; 
    int actual = 10; 

    // ACT 
    var integerRule = new IntegerGreaterThanRule(threshold); 

    var integerRuleEngine = new RuleEngine<int>(); 
    integerRuleEngine.ActualValue = actual; 
    integerRuleEngine.Add(integerRule); 

    // Get the result 
    var result = integerRuleEngine.MatchAll(); 

    // ASSERT 
    Assert.IsTrue(result); 
} 

... 그러면 규칙 엔진을 천천히 구축하는 내 블로그를 체크 아웃 할 수 있습니다. http://www.duanewingett.info/2015/01/21/SimpleCRuleEnginePart1TheRuleEngine.aspx