Каков идеальный способ определения сингулярных и множественных GET в хранилище API?

У меня есть уровень внутренней памяти в моем приложении, который обрабатывает объекты Foo .Во время операций Get уровень данных имеет значительные преимущества для кластеризации, но на самом деле я выполняю несколько операций примерно в 10% случаев. Вот различные подходы, которые я рассмотрел:

Подход A:

interface FooStorage {
  Foo getFoo(String name);
  List<Foo> getFoos(List<String> names);
}

Подход B:

interface FooStorage {
  List<Foo> getFoos(List<String> names);
}
class StorageUtility {
  public static <T> T firstOrNull(List<T> data) { ... }
}

Подход C:

interface FooStorage {
  List<Foo> getFoos(String... names);
}
class StorageUtility {
  public static <T> T firstOrNull(List<T> data) { ... }
}

Обратной стороной подхода A является наличие большей поверхности, которую мне нужно поддерживать.
Обратной стороной подхода B является то, что потребитель создает список, когда в 90% случаев он мне не нужен. Обратной стороной подхода C являются накладные расходы на копирование списка в массив в 10% случаев.

Есть ли канонический правильный способ сделать это?

6
задан Hounshell 18 October 2011 в 17:04
поделиться