APIデータを取得する際に使用するモデルと、エンティティフレームワークで使用するモデルを変換する変換クラスを作成しています。 2つが分離されている理由は、フィールド上のJSON.Net注釈によるものです.APIからデータを取得する際に必要なものと、entitfyフレームワーク& asp.netとの間で競合が発生します。メソッドを保存する方法ごとに若干の違いがあります。
私は1つのフィールドのためにほとんど同じであるクラスのダースを持っています。ここでは、それらの2つの変換メソッドの例を示します。
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;
}
冗長コードを削除してクラスDRYを維持するにはどうすればよいですか?方法はお互いに似ていますが、私は頭の上からこれを行う良い方法を考えることができません。
私はジェネリックメソッドを使うことができましたが、それでも私が扱う必要のあるオフプロパティは1つもありません。それぞれのクラスは非常に似ているので、すべて継承したベースクラスを作ることができますが、一回限りのプロパティはまだ問題です。