У меня есть уровень внутренней памяти в моем приложении, который обрабатывает объекты 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% случаев.
Есть ли канонический правильный способ сделать это?