2012-02-03 158 views
3

我是业务逻辑组件,使客户可以在网上订购。到目前为止,我简单的商业逻辑是这样的:订单和订单明细

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 

    } 

Products List不支持包含多个批量的产品订单。我如何在这里添加支持?我如何从客户端调用它?

回答

1

不要使用List,使用Dictionary<Product,int>,其中int参数是数量,或Dictionary<int,int>,其中第一int是产品ID和第二个是数量。

你总是可以覆盖.Equals为您Product类产品ID的方面来实现的,所以你还是使用int定义产品,但它可能使事情变得简单一点的道路(或如果你需要改变它)。

+0

感谢您的答复。 'Dictionary'总是需要一个密钥,该密钥必须是唯一的。这种情况下关键是什么? – Victor 2012-02-03 20:46:35

+0

您应该使用ProductID作为关键字(假设您只希望您的订单中的每个产品都有一次)。它是一个整数,因此计算Dictionary内部使用的散列速度非常快,您也可以知道产品是否已经在您的订单中。 – Jay 2012-02-03 20:50:15

+0

@Jay - 啊,所以它是'Dictionary '。是的,Dictionary在搜索时比列表快得多,但是当您实际下订单时,它不会增加复杂性,因为客户现在需要知道他们选择的每个项目的产品ID? – Victor 2012-02-03 21:04:44

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

请澄清:

1)在课堂上令您的意思是否这样写:

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

2)你确定你是不是缺少一个中间对象:

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

在这种情况下,你会:

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

3)您是否试图确保每个OrderItem的数量为1?换句话说,你不想让人们订购不止一种产品?或者你是否试图确保有人不会将同一产品两次添加到OrderItems中?

+0

感谢您的回复。 1)是的,我的意思是,只是一个错字抱歉2)不,我不确定,埃德的回应增加了这一点。 3)不,我不是要确保允许多个数量,因此我的原始问题 – Victor 2012-02-03 21:05:10

+0

>>产品列表将不支持包含多个产品的订单。我如何在这里添加支持? << 由此我以为你的意思是你想实施“不支持包含产品的订单......” 在这种情况下,我同意爱德。字典是一个简单的选项,可以让多种产品同时确保任何产品只出现在列表中一次。 – Bitfiddler 2012-02-03 21:20:27