2009-11-09 2 views
1

우리의 사업은 현재 온라인 상점을 운영하고 있으며, 최근에 저희는 고객에게 무료로 특별 상품을 제공하고 있습니다. 바로 지금, 우리는 단순히 스페셜을 표시하고 구매자에게 체크 아웃 후 여분의 무료 항목을 주문에 추가 할 것이라는 내용의 통지를줍니다. 물론이 전체 프로세스를 자동화하는 것이 좋을 것입니다.실용적인 온라인 스토어에 무료 제공/주보 선물

나는 할인 모델을 만들고있다. (이 경우에는 장고를 사용하고 있지만 논리적인 질문이 더 많다.)이 모델은 다양한 플래그와 제품 목록을 가지고있다. 그래서 나는 이렇게 인스턴스를 만들 수 있습니다 :

Discount(
     description="Get one free pair of bands when you buy two pairs of shoes.", 
     valid_products=[BigProductA, BigProductB], 
     received_products=[FreebieProductA, FreebieProductB], 
     special_in_intervals=2, # Whenever the user buys 2, give one for free 
     ) 

이 논리 종류의 작품. 그런 다음 장바구니에있는 제품을 살펴보고 모델의 기존 할인에 대해 테스트 한 다음 적용 여부를 확인하십시오. 이것에 대한 가장 큰 문제는 특히 여러 스페셜이 있고 너무 잘 작동하는 것을 보지 못한다면 매우 지저분해질 수 있다는 것입니다.

불행히도, 지금 당장은 이것이 내 생각에 가장 좋습니다. 그래서 저는 여러분에게 물어 보게됩니다 : 이것을 위해 최선의 접근법은 무엇이라고 생각합니까? 나는 코드를 찾는 것이 아니라, 논리에 대한 아이디어와이를 수행하는 방법을 찾고있다. :)

미리 감사드립니다.

답변

2

지옥에 오신 것을 환영합니다. 잠시만있어. ;) Ahem.

할인은 엉망이므로 할인을받을 필요가 있습니다. 디자인의 관점에서 보면 테스트는 Discount 인스턴스의 일부 여야합니다. 즉, appliesTo(cart) 메소드와 apply(cart) 메소드가 있어야합니다. 첫번째는 할인이 적용되는지를 알려주고, 두 번째는 실제로 할인을 적용합니다. apply() 메서드는 장바구니의 "사용자 부분"을 변경하지 않고 추가 필드를 수정하여 장바구니를 쉽게 재설정 (모든 할인 항목 삭제)하고 프로세스를 다시 실행할 수 있도록하는 것이 좋습니다.

이렇게하면 "Y를 구입할 때 X를 무료로 받으십시오."와 "Y $$$를 사면 X %의 환급을 받으십시오"와 같이 가장 자주 나타나는 두 가지 할인 유형을 명확하게 구현할 수 있습니다. 원래 수치를 변경하지 않으므로 여러 할인 및 리베이트를 쉽게 적용 할 수 있습니다.

또한이 모든 것을 단위 테스트로 백업하여 모든 것이 제대로 작동하는지 확인하는 것이 좋습니다. 그렇지 않으면 다음 할인이 마지막 것일 수 있습니다. :)

+0

답해 주셔서 감사합니다. 지금까지 모든 논리를'할인'모델에 담아두고 있으며 그렇게 유지할 계획입니다. 가장 큰 문제는 사용자에게 무료 항목을 제공하여 목록에서 선택하고 다시하지 않도록 알리는 프로세스입니다. 그 데이터를 어디에 저장할 것입니까? 나는 몇 가지 아이디어를 가지고 있지만 모두 좋게 시작한 다음 지저분한 지옥과 너무 많은 단계로 들어갑니다. 아직도 생각하고 있지만 ... – Bartek

+0

카트의 특수/추가 필드에 저장합니다. 할인이 추가 된 추가 항목을 식별 할 수 있어야합니다. 그러면 렌더러가 계속 표시 할 수있는 동안 총 계산기가 해당 값을 무시할 수 있습니다. 필요한 경우 장바구니의 항목에 일시적인 필드를 추가하는 것을 주저하지 마십시오. 다른 필드의 데이터는 수정하지 마십시오. –

+0

고마워, 그게 최선의 경로 인 것 같다. 윌 물론 물론, 오 하나님이 작동하도록 많은 단위 테스트를 작성해야합니다 :) – Bartek

0

나는 조용한 질문을하지 않는다. 그러나 DISTINCT를 선택하면 (차라리 SQL에서 "의사 논리"를 쓰고있다.) 차 안에있는 아이템과 일치하는 모든 무료 아이템을 찾은 다음 하나만주고 싶다면 또는 그 (것)들의 n - tblFREE에서 DISTINCT는 어디에서 freebeid에서 품목을 골라 내는지 품목 (품목에서 자유로운 품목을 선택하십시오) 어디에서 품목을 선택하십시오 (**** Freebe Givaway Logic ***))

자유로운 공짜 로직은 항상 true 또는 false를 평가해야하는 일반적인 자리 표시 자입니다.

여기서 (select count (*) from cart> 2) 로직이 작동하면 목록에 항목이 표시되고 그렇지 않은 경우 - 너 아무것도 얻지 못할거야.

당신이 당신의 코드에이 논리를 이동하고 DB에서 "쿼리"의 첫 번째 부분을 실행할 수 있습니다

...

논리는 ....

에 AND 나 OR 다른 논리와 함께 사용할 수 있습니다

일단 사용자가 쿠폰을 수락하면 - 장바구니에 목록을 추가하면 할인/프리비가 적용되었음을 알리는 플래그를 표시해야하므로 두 번 발생하지 않습니다 ...

나는 그것이 무엇을 의미하는지 궁금합니다. 그것은 SQL보다 더 쉽게 말할 수 있습니다 :-)

나는 targ ets 귀하의 질문 ...

관련 문제