适用于私人领域的数据结构 - 库存

时间:2014-10-19 08:43:55

标签: c# data-structures

我正在进行涉及管理产品库存的任务。具体来说,我们给出了一个接口IProduct和IInventory来实现。大部分都是直截了当的,但我遇到了设计障碍,我对最佳实践感到疑惑。

对于Inventory类的后备字段,我有两种选择:列表或字典(自定义类可能有点过分)。作业要求我们:

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

鉴于这些要求,我准备跳入并将私有字段作为字典,但后来我看到了要求:

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

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

  1. 创建两个私人支持字段,一个列表和一个字典,但这看起来不实用且不够优雅。
  2. 使用列表,并针对前四个要求跳过几个箍(比如为索引器编写循环,并在要求按字母顺序排序时制作排序副本)。
  3. 我应该采取以上哪些行动,或者我应该做一些完全不同的事情?

1 个答案:

答案 0 :(得分:0)

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