В моем приложении есть слой внутренней памяти, который обрабатывает 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) { ... }
}
Недостатком подхода А является большая поверхность, которую мне нужно поддерживать.
Недостаток подхода B заключается в том, что потребитель строит список, когда 90% времени он мне не нужен.
Недостатком подхода C является издержка копирования списка в массив в 10% случаев.
Есть ли канонический правильный способ сделать это?