专用字段的正确数据结构-库存
本文关键字:数据结构 库存 字段 专用 | 更新日期: 2023-09-27 18:27:06
我正在执行一项任务,该任务涉及管理产品库存。具体来说,我们得到了一个要实现的接口IProduct和IInventory。大部分都很简单,但我遇到了设计障碍,我想知道最佳实践。
对于Inventory类的后备字段,我有两个选择:List或Dictionary(自定义类可能有些过头了)。任务要求我们:
- 编写一个方法,允许用户将项目添加到您的库存中
- 不允许添加重复项目(具有相同名称的项目)
- 实现索引器(以便myInv[myItemName]应返回与myItemName对应的Item)
- 编写一个方法,按名称的字母顺序返回项目列表
考虑到这些要求,我本想把私有字段变成一本字典,但后来我看到了这个要求:
- 编写一个方法,按照项目添加到库存的顺序返回项目列表
我想知道在这种情况下最好的行动方案是什么。我在两个想法之间左右为难:
- 创建两个私有的支持字段,一个列表和一个字典,但这看起来既笨拙又不雅
- 使用一个列表,跳过前四个要求的几个环节(比如为索引器编写一个循环,然后在要求按字母顺序排列时制作一个排序副本)
我应该采取以上哪种行动,还是应该做一些完全不同的事情?
我会将其实现为List<InventoryItem>
(或表示库存项的任何特定类)的包装器。类似这样的东西:
public class Inventory {
private List<InventoryItem> inner = new List<InventoryItem>();
public void Add(InventoryItem item) {
if (inner.Exists(x => x.Name == item.name)) {
throw new ArgumentException("Duplicate item");
} else {
inner.Add(item)
}
}
public List<InventoryItem> OrderedByName() {
return inner.OrderBy(x => x.Name);
}
public List<InventoryItem> OrderedByDate() {
return inner;
}
public InventoryItem this[int i] {
get {
return inner[i]
}
}
}