SolarSystem
で識別される単一のエンティティに関するさまざまな情報を返す複雑な一連のApi呼び出しをモデル化しようとしていSolarSystemID
ます。さまざまなApi呼び出しがに関する情報を返していますがSolarSystem
、1回のApi呼び出しですべての情報を取得できるわけではありません。
データ例:
<eveapi version="2">
<currentTime>2013-02-10 19:30:31</currentTime>
<result>
<rowset name="solarSystems" key="solarSystemID" columns="solarSystemID,shipJumps">
<row solarSystemID="30004995" shipJumps="100"/>
<row solarSystemID="30001746" shipJumps="3"/>
<row solarSystemID="30004972" shipJumps="2960"/>
...
と:
<eveapi version="2">
<currentTime>2013-02-10 19:02:37</currentTime>
<result>
<rowset name="solarSystems" key="solarSystemID" columns="solarSystemID,shipKills,factionKills,podKills">
<row solarSystemID="30000750" shipKills="0" factionKills="61" podKills="0"/>
<row solarSystemID="30034971" shipKills="0" factionKills="113" podKills="0"/>
<row solarSystemID="30003049" shipKills="0" factionKills="195" podKills="0"/>
...
JumpsApiRequest
個々のApi呼び出し( 、、KillsApiRequest
など)を行うためのいくつかの異なるApi呼び出しクラスがあります。このデータを、によってインデックス付けされたオブジェクトのコレクションをSolarSystems
保持する1つのクラスにモデル化しようとしています。Dictionary<int, SolarSystem>
SolarSystem
SolarSystemID
私が見ることができる唯一のアプローチはSolarSystems
、static
クラスを作成し(一度に1つのインスタンスのみが存在できます)、情報が最新であるかどうかを尋ねる特定の情報を返すプロパティを持つか、対応するものを呼び出してApiRequest
情報を更新することです。最新ではない場合は、最新の情報を返します。
私が迷っているのは、情報がさまざまなApi呼び出しからのものである場合にこれを処理する最善の方法がわからないということです。Api呼び出しを行った後、すべての結果を繰り返し処理し、SolarSystems
クラスの各要素のインデックスを更新することができましたSolarSystemID
が、これは非常に非効率的です。ソーラーシステムの数は非常に多いです。
Linqのいくつかのプロパティを利用して、これをデータベースのようなシナリオに変換できるかどうか、またはこれらすべての値をローカルに格納するデータベースを作成することでメリットが得られるかどうか疑問に思っています。データベースがより良いアプローチである場合、あなたの推奨する解決策は何ですか?
ありがとう。
すべてのApiCallクラスは、基本ApiRequest
クラスを継承します。抽象ApiRequest
クラスは以下を実装します:
public DateTimeOffset TimeRequested { get; set; }
public DateTimeOffset CachedUntil { get; set; }
public List<Parameter> Parameters { get; set; }
protected XDocument Results { get; set; }
protected static string _Host;
private Uri CombinedUri { get; set; }
private void CombineUri()
public virtual void MakeRequest()
protected virtual void ParseResults()
各サブクラスには、特定のApi呼び出しの結果に対応するプロパティがありParseResults
、xmlから抽出してプロパティに配置するオーバーライドされたメソッドを実装します。