私のDBからデータを取得し、( "すべて"のオプション値を含む)移入されたSelectListオブジェクトを返す次の2つのメソッドがあります。問題は、それらが異なるリポジトリオブジェクトにアクセスし、異なるID名(StatusIdとTeamId)を持っていることを除いて、ほとんど同じです。私は、リポジトリをパラメータとして受け取り、ID名が何かであるべきか、反射や何らかのラムダ式を使って何かを調べるという、単一のメソッドにリファクタリングする機会があると思いますが、これを達成する。1つのメソッドにSelectListを生成する2つのメソッドをリファクタリングします
private SelectList GetStatusSelectList(int selectedStatusId)
{
List<MemberStatus> statusList = _memberStatusRepository.All().ToList();
statusList.Insert(0, new MemberStatus {StatusId = 0, Name = "All"});
var statusSelectList = new SelectList(statusList, "StatusId", "Name", selectedStatusId);
return statusSelectList;
}
private SelectList GetTeamSelectList(int selectedTeamId)
{
List<MemberTeam> teamList = _memberTeamRepository.All().ToList();
teamList.Insert(0, new MemberTeam { TeamId = 0, Name = "All" });
var teamSelectList = new SelectList(teamList, "TeamId", "Name", selectedTeamId);
return teamSelectList;
}
これらを1つの方法でどのようにリファクタリングするかを知る手助けは誰にもありますか?
これらのクラスを編集できますか?つまり、インターフェースを追加できますか? –
はい... _memberTeamRepostioryと_memberStatusRepositoryの両方がIRepositoryインターフェイスを実装しています。そのインタフェースには、IQueryable All()のようなメソッドを含むDBとやりとりするすべてのメソッドがあり、指定されたTEntityの_dbSetを単純に返します。 –
bigmac
MemberTeamとMemberStatusについて - 直接または部分クラスでそれらを変更できますか? – foson