作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在从事一个项目,该项目提供要在实体上完成的操作列表,每个操作都是对后端的 API 调用。假设实体是一个文件,操作是转换、编辑、复制。这样做肯定有更简单的方法,但我对一种允许我链接这些操作的方法感兴趣,类似于 java Streams 中的中间操作,然后当我点击终端操作时,它决定执行哪个 API 调用,并且执行可能需要的任何优化。我的 API 调用依赖于其他操作的结果。我正在考虑创建一个界面
interface operation{
operation copy(Params ..); //intermediate
operation convert(Params ..); // intermediate
operation edit(Params ..); // intermediate
finalresult execute(); // terminal op
}
现在,根据创建管道的顺序,这些功能中的每一个都可能影响另一个。我的高级方法是将操作名称和参数保存在操作方法的各个实现中,并使用它来决定和优化执行方法中我想要的任何内容。我觉得这是一种不好的做法,因为从技术上讲,我在操作方法中什么都不做,这感觉更像是一种构建器模式,但又不完全是那样。我想知道我的方法的想法。在java中构建操作流水线有没有更好的设计?
如果问题显得模糊,我深表歉意,但我基本上是在寻找一种在 Java 中构建操作管道的方法,同时审查我的方法。
最佳答案
你应该看看这样的模式
EntityHandler.of(remoteApi, entity)
.copy()
.convert(...)
.get();
public class EntityHandler {
private final CurrentResult result = new CurrentResult();
private final RemoteApi remoteApi;
private EntityHandler(
final RemoteApi remoteApi,
final Entity entity) {
this.remoteApi = remoteApi;
this.result.setEntity(entity);
}
public EntityHandler copy() {
this.result.setEntity(new Entity(entity)); // Copy constructor
return this;
}
public EntityHandler convert(final EntityType type) {
if (this.result.isErrored()) {
throw new InvalidEntityException("...");
}
if (type == EntityType.PRIMARY) {
this.result.setEntity(remoteApi.convertToSecondary(entity));
} else {
...
}
return this:
}
public Entity get() {
return result.getEntity();
}
public static EntityHandler of(
final RemoteApi remoteApi,
final Entity entity) {
return new EntityHandler(remoteApi, entity);
}
}
关键是保持状态不可变,并在局部位置处理线程安全,例如在本例中的 CurrentResult
中。
关于java - 如何在Java中为一系列API调用构建自定义的中间操作管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54696831/
我是一名优秀的程序员,十分优秀!