1

假设我想计算我的缺陷的累积估计。我愿意

double estimate = 0.0;
Double tEstimate = 0.0;
Collection<Defect> defects = project.getDefects(null);
for(Defect d : defects){
   tEstimate = d.getEstimate();
   if(tEstimate != null){
      estimate += tEstimate;
   }
}

这里每次调用 d.getEstimate() 都会对服务器进行回调,这意味着这段代码运行得非常慢。我想预先考虑一次性性能并下载所有信息以及缺陷对象,可能包括获取一些我不会使用的信息,但避免在循环的每次迭代期间遇到服务器回调的延迟.

4

2 回答 2

2

您正在使用 VersionOne 对象模型 SDK。由于您所抱怨的事情,它确实缺乏稳健性。低效率之一是它如何知道您正在请求资产列表,但首先获取具有预定属性集(例如 AssetState)的所有资产,并检查它是否是死资产。在此之后,它再次调用以再次获取相同的资产列表,但具有您指定的属性。这可以通过应用一个贪心算法来解决,该算法可以获取一组属性,这样无论在 .get_() 方法中请求哪些属性,都会返回该组的每个成员。为什么?这已经(某种程度上)发生在基于 Rest 的 VersionOne API 中。如果查询返回所有属性,这可能会有点浪费,尤其是对于大量积压。

无论如何,VersionOne 将在不久的将来弃用对象模型,因此如果您计划使用 OM 进行大量编码,请考虑这一点。

这里有一些方法可以规避这个问题

1) 重写您的代码以使用 VersionOne APIClient SDK。它具有 XML 管道,因此您将节省大量编写自己的时间。这有点冗长,但它更强大、更快速、更高效。Object 模型实际上是建立在 APIClient 之上的。

2) 使用 Java 和原始的 VersionOne Rest API 重写您的代码 - 要求您了解 http 和 VersionOne Rest API。

3)如果你不能从Object模型改变,你可以混合2个sdks。当您需要读取大量数据时,只需使用 APIClient 代码来管理该段代码。当您可以只学习 APIclient 并专门使用时,这有点毫无意义,除非您在使用 Object 模型方面进行了大量投资并且您无法更改。代码变得非常快。不建议。

于 2014-06-02T20:42:57.020 回答
1

API 端点公开资产的rest-1.v1操作,包括DeepCopy. 没有枚举所有操作的客户端代码,因此您必须首先使用API 端点探索资产。meta.v1使用对象模型中的 API 客户端后门,您可以访问允许您在知道名称后调用操作的类。

于 2014-06-03T12:16:14.333 回答