2012-02-03 8 views
3

나는 비즈니스 로직 구성 요소를 사용하여 고객이 온라인 주문을 할 수 있습니다. 지금까지 내 단순화 된 비즈니스 논리는 다음과 같다 : Products주문 및 주문 세부 사항

public class Product 
    { 
     public int productID { get; } 
     public string name { get; set; } 
     //other properties here like address and such 
    } 


    public class Order 
    { 
    public int orderID { get; } 
    public Customer customer { get; set; } 

    public List<Product> OrderItems { get; set; } 
    //other properties go here 

    } 

목록 여러 수량의 제품을 포함하는 명령을 지원하지 않습니다. 여기서 지원을 어떻게 추가합니까? 클라이언트 측에서 어떻게 부르겠습니까?

답변

1

int 파라미터 금액, 또는 제 int 제품 ID를 Dictionary<int,int>이고, 두 번째는 양이다 어디 Dictionary<Product,int>을 사용하는 List 사용하지 않는다.

여전히 제품을 정의 할 int을 사용하고, 그래서 당신은 항상 당신의 제품 ID의 관점에서 구현 될 수있는 당신의 Product 클래스 .Equals을 대체 할 수 있지만,이 도로 아래로 조금 더 간단한 일을 할 수

(또는 경우 당신은 그것을 바꿀 필요가 있습니다).

+0

답장을 보내 주셔서 감사합니다. 'Dictionary'는 항상 키가 필요하며 그 키는 유일해야합니다. 이 경우 핵심은 무엇입니까? – Victor

+0

ProductID를 키로 사용해야합니다 (주문시 각 제품을 한 번만 사용한다고 가정). 정수이기 때문에 사전에 내부적으로 사용되는 해시를 계산하는 것은 매우 빠르며 제품이 이미 주문의 일부인지 여부도 알 수 있습니다. – Jay

+0

@Jay - ah이므로 'Dictionary '입니다. 예, 사전은 검색보다 훨씬 빠르지 만 실제로 주문할 때 복잡성을 추가하지는 않습니다. 클라이언트는 이제 선택한 각 항목에 대해 제품 ID를 알아야하기 때문에? – Victor

0

제품에 다시 링크가 포함 된 주문 항목이 포함 된 세 번째 데이터 개체를 추가합니다.

public class OrderLineItem 
{ 
    Product p { get; set; } 
    int Quantity {get; set;} 
    Decimal PricePerItem {get; set;} 
} 
0

당신은

처럼 뭔가를 만들 수 있습니다 : 이유 존재는 당신이 지금 양이 필요하지만, 나중에 내가 당신이 아래 항목 당 가격을 조정할 수있는 대형 할인을 제공 할 것 추측하기 위하여려고하고 있다는 것입니다
class OrderItem { 
    public Product Product .. 
    public int Qty .. 
} 

class Order { 
    public List<OrderItem> Items .. 
} 
3

또 다른 방법은 OrderItem 클래스와 간접 수준을 추가하는 것입니다 :

public class Product 
{ 
    public int productID { get; } 
    public string name { get; set; } 
} 

public class OrderItem 
{ 
    public Product product { get; set; } 
    public int quantity { get; set; } 
} 

public class Order 
{ 
    public int orderID { get; } 
    public Customer customer { get; set; } 

    public List<OrderItem> items { get; set; } 
} 

Order은 이제 OrderItems의 목록을 참조하며, 각 OrderItem에는 연결된 quantity이 있습니다.

0

쇼핑 카트를 구상하는 방법을 구조화 할 수 있습니다. 단일 라인은 특정 제품의 수량입니다. 제품과 수량을 참조한 ProductLine 객체와 같은 것입니다. 논리가 얼마나 구체적인 지에 따라 제조업체, SKU 등과 같은 제품에 대한 추가 속성이있을 수 있습니다. 여러 제조사의 제품을 비교할 수있는 경우가 있습니다. 주문에 관심이 없지만이를 추적해야합니다.

0

명확히하십시오에서

public class OrderItem 
{ 
    public int productID { get; } 
    public int quantity { get; set; } 
    // possibly other properties 
} 

: 당신은 당신이 중간 오브젝트 누락되지 않습니다 확신)

public List<Product> OrderItems() { get; set; } 
//other properties go here 

2 : 클래스 위해

1) 당신이 쓰는 것을 의미했다 어떤 경우에는 당신이 가질 것이다 :

public List<OrderItem> OrderItems() { get; set; } 

3) 각 OrderItem의 수량이 1인지 확인하려고합니까? 즉, 사람들이 각 제품을 하나 이상 주문할 수 없도록하고 싶습니까? 또는 누군가가 동일한 제품을 OrderItems에 두 x 추가하지 않았는지 확인하려고합니까?

+0

. 1) 네, 그 뜻, 그냥 오타가 미안 해요 2) 아니, 잘 모르겠다. 3) 아니요, 여러 수량이 허용되도록하려는 것이 아니므로 본래의 질문 – Victor

+0

>> 제품 목록은 여러 수량의 제품을 포함하는 주문을 지원하지 않습니다. 여기서 지원을 어떻게 추가합니까? << 나는 제품을 포함한 주문을 지원하지 않기를 원한다고 생각했다. " 나는 Ed에 동의한다. 사전은 여러 제품을 보유하는 간단한 옵션이며 제품은 목록에 한 번만 표시됩니다. – Bitfiddler