我正在尝试对一系列复杂的 Api 调用进行建模,这些调用返回有关SolarSystem
由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"/>
...
我有几个不同的 Api 调用类来进行单独的 Api 调用(JumpsApiRequest
、、KillsApiRequest
等)。我正在尝试将这些数据建模为一个SolarSystems
类,该类将保存一Dictionary<int, SolarSystem>
组SolarSystem
由它们索引的对象SolarSystemID
。
我能看到的唯一方法是创建SolarSystems
一个static
类(一次只能存在一个实例)并具有将返回我要求的特定信息的属性,如果信息是最新的,或者调用相应ApiRequest
的来刷新信息,如果它不是最新的,然后返回最新信息。
我迷失的地方是,当信息来自不同的 Api 调用时,我不确定处理此问题的最佳方法。在我进行 Api 调用后,我可以遍历所有结果并使用 更新SolarSystems
类索引的每个元素,SolarSystemID
但这似乎效率很低。SolarSystems 的数量非常庞大。
我想知道我是否可以利用 Linq 的某些属性将其转换为类似数据库的场景,或者我是否会受益于创建数据库以在本地存储所有这些值?如果数据库是更好的方法,您推荐的解决方案是什么?
谢谢。
所有 Api Call 类都继承自基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 中提取并将它们放入属性的覆盖方法。