我的问题是我想在两个类中使用一个类,但是其中一个类中不存在属性。例如,仓库将物料运送到分支机构,分支机构中的物料应具有DiscountPercentage
属性,但它不存在于仓库中。此外,两个类(Warehouse
和Branch
)中的两个项目实例之间存在连接:当项目添加到分支时,应从仓库中的数量(属性)中减去数量。
我正在考虑OOP概念,它是如何帮助的,但我完全感到困惑。 我为Item创建了一个类:
public class Item
{
public Item()
{
this.Categories = new HashSet<Category>();
}
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public int Quantity { get; set; }
[Required]
public decimal Price { get; set; }
[Range(0, 100), Display(Name = "Discount Percentage"), RegularExpression("([1-9][0-9]*)", ErrorMessage = "Enter only numeric number")]
public double? DiscountPercentage { get; set; } = 0;
public ICollection<Category> Categories { get; set; }
public ICollection<Order> Orders { get; set; }
public ICollection<Branch> Branches { get; set; }
}
public class Branch
{
public int Id { get; set; }
public string Location { get; set; }
public ICollection<Item> Items { get; set; }
}
public class Warehouse
{
public int Id { get; set; }
public ICollection<Item> Items { get; set; }
public ICollection<Branch> Branches { get; set; }
}
我的代码中的问题是仓库中的项目与分支中的项目相同,这不是真的也没有错,OOP如何处理这种情况?
答案 0 :(得分:1)
在适当的班级设计中,DiscountPercentage
不是项目的属性。它也不是分支机构的财产。相反,它是分支和项目之间 relation 的属性:
那么你要做的是创建一些BranchItem
类型,它基本上只位于它们之间并定义包括附加属性的关系:
public class BranchItem
{
public Branch Branch { get; set; }
public Item Item { get; set; }
public double DiscountPercentage { get; set; }
}
答案 1 :(得分:0)
有人想知道你是否真的需要Branch
和Warehouse
个对象,或者每个项目是否只有一个属性location
。
在任何情况下,解决问题的OO方法是创建一个新类,比如WarehouseItem
,其中包含Warehouse
应该能够在{{1}中访问的所有内容}}。然后,使用Item
扩展WarehouseItem
,并在Item
中添加所需的任何属性。在Branch
内,您应该只与Warehouse
进行交互,即使对象实际上是WarehouseItem
类型。这是非常好的教科书polymorphism。
(一个警告:一般来说,你会希望具有较少属性的较简单的类具有更通用的名称,即Item
,并且具有更多属性的扩展名具有更具体的名称。因此,我的示例并不完美。 )