【发布时间】:2017-01-16 14:50:25
【问题描述】:
我正在编写一个转换类来在提取 API 数据时使用的模型之间进行转换,做一个与实体框架一起使用的模型。两者分开的原因是由于字段上的 JSON.Net 注释,当我从 api 中提取数据和将其与 entitfy 框架和 asp.net 一起使用时,我需要的注释之间存在冲突。
我有十几个这样的类,除了一个字段外几乎相同。以下是它们的两种转换方法的示例。
public static IEnumerable<PlayerUnitsKilledRank> ConvertPlayerUnitsKilledRankings(IEnumerable<ApiCombatUnitsKilledRank> rankings, int world)
{
List<PlayerUnitsKilledRank> dbRankings = new List<PlayerUnitsKilledRank>();
DateTime now = DateTime.Now.Date;
foreach (ApiCombatUnitsKilledRank rank in rankings)
{
PlayerUnitsKilledRank dbRank = new PlayerUnitsKilledRank()
{
Date = now,
World = world,
Player = rank.Player,
Alliance = rank.Alliance,
Rank = rank.Rank,
UnitsKilled = rank.UnitsKilled
};
dbRankings.Add(dbRank);
}
return dbRankings;
}
public static IEnumerable<PlayerCavernRaidingRank> ConvertPlayerCavernRaidingRankings(IEnumerable<ApiRaidingCavernRank> rankings, int world)
{
List<PlayerCavernRaidingRank> dbRankings = new List<PlayerCavernRaidingRank>();
DateTime now = DateTime.Now.Date;
foreach (ApiRaidingCavernRank rank in rankings)
{
PlayerCavernRaidingRank dbRank = new PlayerCavernRaidingRank()
{
Date = now,
World = world,
Player = rank.Player,
Alliance = rank.Alliance,
Rank = rank.Rank,
Plundered = rank.ResourcesPlundered
};
dbRankings.Add(dbRank);
}
return dbRankings;
}
你怎样才能删除多余的代码并让我的课程保持干燥?这些方法彼此非常相似,但我想不出一个好的方法来做到这一点。
我可以使用通用方法,但我仍然需要处理那个单一的非属性。由于每个类都非常相似,我可以创建一个它们都继承自的基类,但一次性属性仍然是一个问题。
【问题讨论】: