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() への呼び出しごとにサーバーへのコールバックが行われます。つまり、このコードの実行は非常に遅くなります。1 回限りのパフォーマンス ヒットを前もって取得し、Defect オブジェクトと共にすべての情報をダウンロードしたいと考えています。これには、おそらく使用しない情報を取得することも含まれますが、ループの各反復中にサーバー コールバックの遅延が発生することは避けたいと考えています。 .

4

2 に答える 2

2

VersionOne オブジェクト モデル SDK を使用しています。あなたが不平を言っていることそのもののために、それは堅牢性に欠けています. 非効率性の 1 つは、アセットのリストを要求していることを認識し、最初に AssetState などの事前定義された一連の属性を持つすべてのアセットを取得し、それが無効なアセットであるかどうかを確認する方法です。この後、別の呼び出しを行い、同じアセットのリストを再度取得しますが、指定した属性を使用します。これは、.get_() メソッドで要求された属性に関係なく、このセットの各メンバーが返されるように、一連の属性を取得できる貪欲なアルゴリズムを適用することで解決できます。なんで?これは、現状の Rest ベースの VersionOne API で既に (ある程度) 発生しています。クエリがすべての属性を返した場合、特に膨大なバックログの場合、おそらく少し無駄になります。

とにかく、VersionOne は近い将来オブジェクト モデルを非推奨にする予定なので、OM を使用して多くのコーディングを計画している場合は、これを検討してください。

この問題を回避する方法をいくつか紹介します

1) VersionOne APIClient SDK を使用するようにコードを書き直します。XML 配管が含まれているため、独自の記述を行う時間を大幅に節約できます。これは少し冗長ですが、より強力で高速で効率的です。Object モデルは、実際には APIClient に基づいて構築されています。

2) Java と未加工の VersionOne Rest API を使用してコードを書き直す - http と VersionOne Rest API を理解している必要があります。

3) オブジェクト モデルから変更できない場合は、2 つの SDK を混在させることができます。大量のデータを読み取る必要がある場合は、APIClient コードを使用してコードのそのセグメントを管理します。オブジェクトモデルの使用に多額の投資をして変更できない場合を除き、APIclient を学習して排他的に使用できる場合は、無意味です。コードはすぐにぐちゃぐちゃになります。推奨されません。

于 2014-06-02T20:42:57.020 に答える
1

rest-1.v1API エンドポイントは、を含むアセットの操作を公開しますDeepCopy。すべての操作を列挙するクライアント コードはないため、最初にAPI エンドポイントを使用してアセットを探索する必要があります。オブジェクト モデルの API クライアント バックドアmeta.v1を使用すると、名前がわかれば操作を呼び出すことができるクラスにアクセスできます。

于 2014-06-03T12:16:14.333 に答える