Java 什么';在存储API中定义单数与复数GET的理想方法是什么?
我的应用程序中有一个内部存储层,它处理Java 什么';在存储API中定义单数与复数GET的理想方法是什么?,java,api,data-access-layer,Java,Api,Data Access Layer,我的应用程序中有一个内部存储层,它处理Foo对象。在Get操作期间,数据层对集群Get有显著的好处,但实际上我只在大约10%的时间内执行多次Get。以下是我考虑过的各种方法: 方法A: interface FooStorage { Foo getFoo(String name); List<Foo> getFoos(List<String> names); } 接口存储{ Foo getFoo(字符串名称); 列出getFoos(列出名称); } 方法B: i
Foo
对象。在Get操作期间,数据层对集群Get有显著的好处,但实际上我只在大约10%的时间内执行多次Get。以下是我考虑过的各种方法:
方法A:
interface FooStorage {
Foo getFoo(String name);
List<Foo> getFoos(List<String> names);
}
接口存储{
Foo getFoo(字符串名称);
列出getFoos(列出名称);
}
方法B:
interface FooStorage {
List<Foo> getFoos(List<String> names);
}
class StorageUtility {
public static <T> T firstOrNull(List<T> data) { ... }
}
接口存储{
列出getFoos(列出名称);
}
类存储实用程序{
公共静态T firstOrNull(列表数据){…}
}
方法C:
interface FooStorage {
List<Foo> getFoos(String... names);
}
class StorageUtility {
public static <T> T firstOrNull(List<T> data) { ... }
}
接口存储{
列出getFoos(字符串…名称);
}
类存储实用程序{
公共静态T firstOrNull(列表数据){…}
}
接近A的缺点是需要支持的曲面更大。方法B的缺点是,当90%的时间我不需要时,让消费者建立一个列表。 C方法的缺点是将列表复制到数组的开销占10%
有没有一种规范的正确方法可以做到这一点?在这种情况下,我倾向于使用以下构造:
Foo getFoo(String name) {
return firstOrNull(getFoos(name));
}
List<Foo> getFoos(String ... names) {
return getFoos(Arrays.asList(names));
}
List<Foo> getFoos(List<String> names) {
....
}
Foo-getFoo(字符串名称){
返回firstOrNull(getFoos(name));
}
列出getFoos(字符串…名称){
返回getFoos(Arrays.asList(names));
}
列出getFoos(列出名称){
....
}
您的客户机每次都应该使用最合适的方法,如果您后来发现性能需要对getFoo(name)
采用更有针对性的方法,您可以重新实现该方法
我认为,与在存储系统的接口/实现中保存几行代码相比,更重要的是保持用户代码的可读性(避免仅仅为了满足API而创建列表)