2011-08-04 5 views
1

나는 소매 업체를위한 시스템을 설계하는 시나리오를 가지고 있습니다. 이것은 적절한 라이브 어플리케이션이 아니라 내 OO 설계 기술이 올바른지 여부와 올바르게 생각하는지 여부를 확인하는 시나리오입니다. 나는 아직도 여기에서 배우고있다. 나는 C#에서 이것을하고있다.OOP 디자인이 맞습니까?

고정 제품을 판매하는 소매 업체는 공급 업체의 그의 다양한 고정 번호에서 최고의 가격을 선택하고 해당 공급 업체에서 주문을하는 시스템을 설계하고 싶어 :

시나리오

이있다. 간단히하기 위해 고정 된 제품을 같은 회사의 XYZ 펜 한 제품으로 잘라 냈습니다. 각 공급 업체는 질문을 받으면 XYZ 펜에 대한 견적을 제공하고 소매 업체 시스템은 다양한 판매자로부터 최상의 가격을 선택하고 해당 판매자의 주문을합니다.

접근 1 :

  1. 공급 업체에 대한 추상 클래스와 각 공급 업체에 대한 구현을 작성합니다.
  2. 각 공급자 구현에는 PlaceOrder() 메서드와 cost 속성이 있습니다.
  3. DataLayer는 각 공급자 구현에 대한 cost 속성을 설정합니다.
  4. 각 구현을 최적의 가격으로 평가하고 적절한 구현에 대한 주문을하는 CheckBestRetailer 클래스를 만듭니다.

접근법 2 :

  1. 는 비용 속성과 PlaceOrder() 메소드 유형 공급 업체의 목록을 만듭니다.
  2. 각 공급 업체에 대해 데이터 계층은 새로운 공급 업체 유형을 목록에 추가하고 데이터베이스에서 가져온 비용 세부 정보를 설정합니다.
  3. CheckBestRetailer 클래스는 해당 목록을 반복하며 각 객체에 대해 가장 적합한 가격을 평가하고 해당 구현에 대한 주문을합니다.

위의 두 가지 중에서 접근 방식 1은 OOP에 더 가깝지만 공급 업체 수가 고정되어 있다고 생각합니다. 공급 업체의 수가 데이터베이스에서 검색된 데이터에 따라 변경 될 수있는 경우 접근 방식 2가 더 좋습니다.

당신은 어떻게 생각하십니까?

여기 내 OOAD 테스트를위한 최상의 시나리오가 없을 수 있습니다. 가능하다면 디자인 힌트와 함께 작업 할 수있는 몇 가지 샘플 시나리오를 갖고 싶습니다.

감사합니다.

답변

3

옵션 1은 각 공급 업체마다 서로 다른 동작을하는 경우에 더 적합합니다.이 경우 옵션 2를 사용하는 것이 더 간단하므로 더 나은 선택 인 것으로 보입니다. 내가 뭔가를 해결하는 방법을 모를 때 나는 보통 무엇을

은 다음과 같습니다

  • 목록 내 요구 사항 : 공급 업체 세트 주어진 항목에 대한 최고의 가격을 얻으십시오.내가 내가 내가 요구 사항에 대한 주요 클래스를 코딩을 시작 잃었어요 때 내가 의미
  • 을 생각 관계와 공급 업체, 상품, 유통 업체 등
  • 그리기 또는 레이아웃 클래스 :
  • 후보 객체의 목록을 작성 이 경우 Retailers 및 GetBestRetailer() 메서드가됩니다.

위의 사항 중 아무 것에도 문제가되지 않는다면, 달성해야 할 것을 더 잘 이해하고 어떤 옵션을 찾아야할지 더 잘 이해할 수있는 브레인 스토밍 일 수 있습니다.

어려운 것으로 보이는 모든 문제가 발생할 때마다 필요한 답을 반환하는 메서드를 만들거나 더 나은 것으로 판단되는 경우 새 클래스를 만들어 추상화합니다. 연습으로 나는 '복잡하고 복잡한'부분이 다른 누군가에 의해 코딩 될 것이라고 생각하려고합니다. 그리고 방법이나 클래스에 위임함으로써 문제의 일부분에서 그것을 분리합니다. 지금 당장 제가 집중하고 있습니다.

HTH

3

접근법 2가 더 좋습니다. 공급 업체의 동작이 거의 동일하기 때문에 각 공급 업체마다 고유 한 클래스를 만들 필요가 없습니다.

+0

빌어 먹을 당신은 내가 할인 등을 제공하는 일부 공급 업체와 같은 새로운 복잡성을 소개하면 안 무엇 : –

+0

에 날 이길. 그럼 어느 것이 더 나아 졌습니까? – user20358

+1

데코레이터를 사용하여 특정 클래스에 더 많은 비헤이비어를 추가 할 수 있습니다. 많은 옵션이 있습니다. 지금은 어떤 문제를 해결해야하는지에 따라 다릅니다. 할인이 모든 공급 업체에 적용될 수 있다면 여전히 유용 할 것입니다. 옵션 2와 단 하나의 .. 만약 당신이 그들이 일어날 것임을 알 때까지 미래의 요구 사항에 대해 생각하는 당신의 디자인을 복잡하게하려고하지 마십시오 –