我正在編寫一個轉換類來在拉動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;
}
你怎麼能刪除多餘的代碼,並保持我的班幹?這些方法彼此非常相似,但我想不出一個好辦法來做到這一點。
我可以使用泛型方法,但是我仍然需要單獨的屬性,我需要處理。因爲每個類都很相似,所以我可以創建一個它們都繼承的基類,但是一次性屬性仍然是一個問題。