2014-10-19 4 views
0

Я работаю над заданием, которое включает в себя управление инвентаризацией продуктов. В частности, нам предоставляется интерфейс IProduct и IInventory для реализации. Большая часть из них проста, но я столкнулся с блокпостом дизайна, и мне интересно узнать о лучших практиках.Собственная структура данных для частного поля - Инвентарь

У меня есть два варианта для поля поддержки класса Inventory: List или Dictionary (пользовательский класс может быть излишним). В задании мы спрашиваем:

  • Напишите способ, позволяющий пользователям добавлять элементы в свою инвентаризацию.
  • Запретить добавление повторяющихся предметов (предметов с тем же именем).
  • Внедрение индексов (так что myInv [myItemName] должен вернуть элемент, соответствующий myItemName)
  • Напишите способ, возвращающий список элементов в алфавитном порядке по названию.

Учитывая эти требования, я собирался прыгнуть и сделать частное поле словаря, но потом я увидел требование:

  • Написать метод, возвращающий список элементов в порядке их добавлен в инвентарь.

Мне интересно, какой лучший способ действий в этом сценарии будет. Я жонглирую между двумя идеями:

  1. Создайте два частных поля поддержки, список и словарь, но это кажется громоздким и неэлегантным.
  2. Используйте список и пройдите несколько обручей для первых четырех требований (например, запишите цикл для индексаторов и сделайте отсортированную копию позже, когда вас попросят ввести в алфавитном порядке).

Какое из перечисленных действий следует предпринять, или я должен делать что-то совершенно другое?

+0

Почему бы не просто сохранить список, это будет ваш порядок вставки. Когда придет время для печати, используйте запрос LINQ и порядок в алфавитном порядке. – ChiefTwoPencils

+0

Мы еще не получили LINQ, но, похоже, я могу сделать что-то подобное, возвращая копию отсортированного массива. – afding

ответ

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] 
     } 
    } 
} 
Смежные вопросы