我正在编写一个转换类来在拉动API数据时使用的模型之间进行转换,使用实体框架来使用模型。这两者之间的原因是由于字段上的JSON.Net注释,当从api提取数据时以及在使用asp.net的授权框架时需要这些注释。保持方法DRY在每种方法中都有细微的差异
我有几十个这样的类,除了单个字段几乎完全相同。这里有两个转换方法的例子。
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;
}
你怎么能删除多余的代码,并保持我的班干?这些方法彼此非常相似,但我想不出一个好办法来做到这一点。
我可以使用泛型方法,但是我仍然需要单独的属性,我需要处理。因为每个类都很相似,所以我可以创建一个它们都继承的基类,但是一次性属性仍然是一个问题。