我是Business Logic组件,可以让客户可以下订单。到目前为止,我的简化业务逻辑看起来像这样:
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
列表不支持包含多个数量产品的订单。如何在此处添加该支持?我如何从客户端调用它?
答案 0 :(得分: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
。
答案 1 :(得分:1)
请勿使用List
,使用Dictionary<Product,int>
,int
参数是数量,或Dictionary<int,int>
,其中第一个int
是产品ID,第二个是数量。
您始终可以覆盖.Equals
类Product
,以便根据您的产品ID实施,因此您仍然使用int
来定义产品,但它可能会让事情变得更简单(或者你需要改变它)。
答案 2 :(得分:0)
我会添加第三个数据对象,其中包含包含返回产品的链接的订单商品。原因是你现在需要数量,但后来我猜你会想要给大件折扣,你可以调整每件商品的价格:
public class OrderLineItem
{
Product p { get; set; }
int Quantity {get; set;}
Decimal PricePerItem {get; set;}
}
答案 3 :(得分:0)
你可以使它像
class OrderItem {
public Product Product ..
public int Qty ..
}
class Order {
public List<OrderItem> Items ..
}
答案 4 :(得分:0)
您可以根据自己的需求来构建购物车的外观。单行将是某个产品的数量。像ProductLine对象那样引用产品和数量的东西。根据您的逻辑具体情况,您可能在产品(如制造商,SKU等)上拥有其他属性。有时您可能会从多个制造商那里获得可比较的产品,并且为了订单而感兴趣但需要跟踪它。
答案 5 :(得分: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?