我想收集关于哪个更好或更坏的反馈......
Function<I, O> {
List<O> take( I );
}
或者
Receiver<T> {
void take( T );
}
Processor<I, O> {
void processor( I, Receiver<O>> );
}
我知道简单的答案是功能,但处理器确实有一些好处。
- 添加了传递作为内容过滤的接收器的能力。
我想收集关于哪个更好或更坏的反馈......
Function<I, O> {
List<O> take( I );
}
或者
Receiver<T> {
void take( T );
}
Processor<I, O> {
void processor( I, Receiver<O>> );
}
我知道简单的答案是功能,但处理器确实有一些好处。
没有明确的首选替代方案。这取决于用例。
正如您所指出的,选择前者的主要原因是简单。客户不必为了使用您的界面而实现任何东西。对于服务 API,Function 并不总是最佳选择,因为您可能事先不知道要回馈多少个 Os。
选择后者的主要原因是可扩展性。例如,您可能正在生成数百万个 O 对象,并且在返回任何内容之前尝试将它们全部填充到内存中是自杀的。然而,像处理器这样的回调模式很难硬塞到服务 API 中。
服务 API 的最佳选择是混合:
Function<I, O> {
List<O> take( I, OToken );
}
在其中您返回 O 的“页面”,从 OToken 开始,该 OToken 表示返回的最后一页的结尾。顺便说一句,如果您愿意返回Iterator<O>
而不是List<O>
.