专用字段的正确数据结构-库存

本文关键字:数据结构 库存 字段 专用 | 更新日期: 2023-09-27 18:27:06

我正在执行一项任务,该任务涉及管理产品库存。具体来说,我们得到了一个要实现的接口IProduct和IInventory。大部分都很简单,但我遇到了设计障碍,我想知道最佳实践。

对于Inventory类的后备字段,我有两个选择:List或Dictionary(自定义类可能有些过头了)。任务要求我们:

  • 编写一个方法,允许用户将项目添加到您的库存中
  • 不允许添加重复项目(具有相同名称的项目)
  • 实现索引器(以便myInv[myItemName]应返回与myItemName对应的Item)
  • 编写一个方法,按名称的字母顺序返回项目列表

考虑到这些要求,我本想把私有字段变成一本字典,但后来我看到了这个要求:

  • 编写一个方法,按照项目添加到库存的顺序返回项目列表

我想知道在这种情况下最好的行动方案是什么。我在两个想法之间左右为难:

  1. 创建两个私有的支持字段,一个列表和一个字典,但这看起来既笨拙又不雅
  2. 使用一个列表,跳过前四个要求的几个环节(比如为索引器编写一个循环,然后在要求按字母顺序排列时制作一个排序副本)

我应该采取以上哪种行动,还是应该做一些完全不同的事情?

专用字段的正确数据结构-库存

我会将其实现为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]
        }
    }
}