2017-12-22 67 views
1

나는 장바구니의 가격을 출력 할 장바구니 응용 프로그램을 작성 중입니다. 나는이 장바구니, 구매, 또한 서비스를 할 수 있습니다 제공하고 카트를 가질 수 개별 제품 위와 같이 제품Java 디자인 패턴 - 제품 및 장바구니에 쿠폰을 적용하는 방법

public class Product { 

    private int id; 
    private String name; 
    private double price; 
    Offer offer; 
// getter setter 

    public double getPrice(int quantity) { 
     return offer.getPrice.... 
    } 

} 

public class Purchase { 

    Product product; 
    int quantity; 
// getter setter 

    public double getPrice() { 
     return product.getPrice(quantity); 
    } 

} 

public class Cart { 

    List<Purchase> purchase = new ArrayList<Purchase>(); 
    Offer offer; 
    Integer loyalityPoints; 
//getter setter 

    public double getTotal(){ 
     double total = 0; 
     for (Purchase purchase : purchase) { 
      total += purchase.getPrice(); 
     } 

     double finalPrice = offer.getPrice(total,....; 
     return finalPrice; 
    } 


} 

을 위해 3 종류가 있습니다.

처음에는 제공 공장이 있다고 생각했습니다. OfferPrice는 추상 클래스 &이 될 수 있습니다. 그 자식은 buyonegetoneprice, buytwogetoneprice, 50precentoffprice를 구매할 수 있지만 buyonegetoneprice에 대한 입력은 qunatity가되며 가격은 50precentoffprice만의 값입니다.

이것은 두 가지 다른 방법을 의미하지만 OfferPrice의 구현자는 단 하나의 구현과 관련이 있습니다.

어떻게 장바구니에 제공 할 수 있을까요? 장바구니에있는 쿠폰은 고객 충성도 포인트 또는 50percentoff 또는 다른 것을 기반으로 할 수 있습니다.

장바구니 및 개별 제품에 대해 이러한 제품을 확장 가능하도록 설계하는 방법은 무엇입니까?

답변

-1

질문은 약간 일반적인 질문이지만 몇 가지 아이디어를 제공하려고합니다.

1) TDD를 사용하지 않는 경우 디자인을 개선하는 데 도움이됩니다. 코드를 테스트 할 수 없으면 잘못되었거나 잘못 처리 되었기 때문입니다.

2) 거의 모든 것에 DI (Dependency Injection)를 사용하여 새 키워드를 사용하지 않습니다.

3) 미래를 예측하려고하지 마십시오. 우리는 인간이 변경 사항을 예측하는 데 정말로 나쁘기 때문에 리팩토링이 필요하다는 것이 명백해질 때까지 복제본을 그대로 두십시오. 그들이 정말 필요 전에

4) 이유는 항상 상속을 통해 포인트 3

5)을 사용하여 인터페이스, 구성 및 위임과 동일, 디자인 패턴을 적용하지 마십시오.

1

예를 들어 다른 제안 전략이 필요할 수 있습니다. 제 생각에는 인터페이스를 사용하여이 세 클래스를 느슨하게 결합해야합니다. OfferStrategy 만들기 등 제품을 기반으로 제공, 가격을 기반으로 제공하는 등의 서브 클래스는

이것은 또한 (당신은 동적으로 응용 프로그램을 중지하지 않고 전체 애플리케이션 제공을 변경할 수 있습니다) 규칙 엔진 혜택을 누릴 수 있습니다 뭔가처럼 보인다

여기

은 내 디자인에 대한 제안 (각 클래스에 대한 인터페이스, 전략은 내부적으로 규칙을 사용하여 다른 제안 알고리즘을 캡슐화) : *이 Ixxx 인터페이스, < 대표 -, i- 제품제공 - 관계

IOffer <입니다 나타냅니다 (210) - 제품, IPurchase < - 구매, IOfferStragegy < - OfferStrategy * (공통 인터페이스 방법과 다른 구현) ICart < - 장바구니 제품과 이벤트를 가지고 카트입니다.

  1. 제안 및 제안 구현이 변경 따라서 인터페이스와 런타임에 변경하는 능력을 필요로 유지하려고하는 것을 가정 : 여기

    은 이러한 작업을 수행하기위한 혜택/이유입니다.
  2. 장바구니 가격은 쿠폰 전략에 따라 결정됩니다.