Hou*_*ell 6 java api data-access-layer
我的应用程序中有一个内部存储层,用于处理Foo对象.在Get操作期间,数据层对群集获取具有显着的好处,但实际上我只有10%的时间会执行多次获取.以下是我考虑过的各种方法:
方法A:
interface FooStorage {
Foo getFoo(String name);
List<Foo> getFoos(List<String> names);
}
Run Code Online (Sandbox Code Playgroud)
方法B:
interface FooStorage {
List<Foo> getFoos(List<String> names);
}
class StorageUtility {
public static <T> T firstOrNull(List<T> data) { ... }
}
Run Code Online (Sandbox Code Playgroud)
方法C:
interface FooStorage {
List<Foo> getFoos(String... names);
}
class StorageUtility {
public static <T> T firstOrNull(List<T> data) { ... }
}
Run Code Online (Sandbox Code Playgroud)
方法A的缺点是需要支持更大的表面.
方法B的缺点是让消费者在90%的时间不需要时建立一个List.方法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) {
....
}
Run Code Online (Sandbox Code Playgroud)
您的客户每次都应该使用最合适的方法,如果您后来发现性能需要更有针对性的方法getFoo(name),您可以重新实现该单一方法。
我认为保持消费者代码的可读性(避免仅仅为了满足 API 而创建列表)比在存储系统的接口/实现中保存几行代码更重要。
| 归档时间: |
|
| 查看次数: |
224 次 |
| 最近记录: |