2010-02-03 5 views
8

저는 가격 계산 엔진을 개발 중입니다. 나는 모든 것을 둘러 보았고 우리가 필요로하는 것에 실제로 맞는 것은 아무것도 없습니다. 그러나, 나는 특정 가격 및/또는 할인을 구현하는 방법을 찾고 있습니다. 내 최종 사용자에게 규칙 기반 엔진을 도입하고 싶지는 않습니다. 왜냐하면 그들이 그것을 얻지 못할 것이기 때문입니다.복잡한 할인 계산을위한 패턴/우수 사례 찾기

예를 들어 ItemX을 주문하면 가격이 $ 30입니다. 그러나 ItemY와 함께 ItemX의 가격은 $ 20입니다. 또는 ItemX 5 개를 주문할 때마다 15 달러가됩니다.

시작 위치에 대한 아이디어가 있으십니까? 이것을 어떻게 받아들이나요? 이러한 실습을 포함하는 일부 (오픈 소스) 예제 응용 프로그램입니까? 내가 사용할 수있는 (기술) 패턴은 무엇입니까? 바람직하게 C#. 미리 감사드립니다.

답변

4

바쁜 비슷한 상황을보고 데코레이터 패턴을 찾는 것이 좋습니다.

http://www.dofactory.com/Patterns/PatternDecorator.aspx

체크 아웃 : http://www.itarchitect.co.uk/articles/display.asp?id=357

건배

또한

내가 구현 할인보고 오전 스트랫 타입의 패턴을 확인 : Discount strategy in shopping cart and orders

+0

나는 또한 데코레이터가 최상의 해결책이라고 생각한다. 특정 제품 범위에 적합한 '모듈'과 특정 조정에 데코레이터를 추가하는 것의 책임을 명확히하기 위해 일련의 책임을 다하고 있습니다. –

2

으로 불편을 끼쳐 드려 죄송합니다. 그러나 이후에 어떤 가격 정책 엔진을 적용해야만하는 것처럼 보일 수 있습니다.

  • 스토어를 사용할 수있는 항목을 가지고있는 것처럼 보인다, 그들의 할인 pruchase 당에겠습니까.
  • 의 항목을 서로 할인하여 저장하십시오.
  • 단위당 단위/수량, 또는 패키지 당/ 어쩌면 생각할 수도 있습니다.
  • 이 스페셜/패키지의 보관/저장을 유지보고 할 수 있습니다, 단지 넣다 고객은 송장 원본의 재 인쇄를 원한다. 일반적으로

는 생각 될 수있는 가능한 규칙/조합이 많이있다, 당신은 개발자로 이것들을 구현하고 사용자로부터 그들을 숨기거나 사용자가 그들을 만들 수 있지만, 누군가가 가지고 있습니다 그렇게하십시오. 당신이 당신의 자신을 구현하는 것 같은 느낌 해달라고 할 때

그리고, Google은 일부를 제공 놈이야 :

Open Source Rule Engines

4

이 당신이 이것을 달성 할 수있는 많은 방법이 있습니다,하지만 난에 가장 도움이 될 수있는 일을 생각한다 비즈니스 사용자가 쉽게 설명하고 합리화 할 수있는 방식으로 할인을 표현할 수있는 DSL을 정의하는 것이 좋습니다. ayende's articles on DSLs in boo 중 하나의 예는 다음과 같습니다 당신이 볼 수있는 볼 수 있듯이

apply_discount_of 5.percent: 
    when order.Total > 1000 and customer.IsPreferred 
    when order.Total > 10000 

suggest_registered_to_preferred: 
    when order.Total > 100 and not customer.IsPreferred 

, 이것은 당신이 밖으로 인쇄하고 클라이언트에 보여줄 수있는 물건의 종류 및 그들은 즉시 무슨 일이 일어나고 있는지 이해할 것이다.

물론 이와 비슷한 것을 개발하는 것은 시간 소모적이며 비싸고 펑키 한 가장자리 케이스가 가득합니다. 그러나 단위 테스트, 실행 및 디버깅이 가능한 코드가되는 이점이 있습니다.

부이가 당신 것이 아니라면, 아마도 ironruby, ironpython 또는 F #에서 유사한 것을 정의 할 수 있습니다. 그러나 나는 당신이 정말로 고통의 세계를 즐기지 않는다면이 규칙을 정의하기 위해 XML에서 멀리 떨어져있을 것을 제안 할 것이다.

그러나 이것은 BizTalk와 같은 제품이 처리하도록 설계된 것입니다. 어떤 규칙 엔진을 평가했는지, 부족한 것으로 나타 났습니까?

+0

내가 DSL 옵션은 최고라고 생각 내 고객에게이 사실을 알리고 싶지 않습니다. 그들은 그것을 이해하지 못하고 에러를 만들 것이고 많은 것들이 있기 때문에 예외를 구현할 시간이 없다 !!! 그러나 어쨌든 고마워요. 아마도 언젠가는 그걸 들여다 볼 것입니다. –

3

우리는 이러한 유형의 복잡한 계산에 규칙 엔진을 사용합니다. 우리의 플랫폼은 Java이며 우리는 Drools를 사용합니다 (우리는 이에 만족합니다). Drools는 .Net에서도 사용할 수 있습니다. 다음은 오픈 소스 Rules Engines for .NET의 목록입니다.