Ho i seguenti due metodi che ottengono i dati dal mio DB e restituiscono un oggetto PopLista popolato (incluso un valore di opzione "Tutto") che poi passerò sulla mia vista. Il problema è che sono quasi identici con l'eccezione che entrambi accedono a diversi oggetti del repository e hanno nomi ID diversi (StatusId e TeamId). Penso che ci sia un'opportunità per rifattorizzarli in un singolo metodo che accetta il repository come parametro e in qualche modo capisce quale dovrebbe essere il nome dell'ID, magari usando il reflection o qualche tipo di espressione lambda, ma non so come per realizzare questo.Refactor due metodi che generano una SelectList in un unico metodo
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;
}
Qualcuno può aiutare a capire come refactoring questi in un unico metodo?
Sei in grado di modificare quelle classi, ad esempio aggiungere un'interfaccia? –
Sì ... sia il _memberTeamRepostiory che il _memberStatusRepository implementano un'interfaccia IRepository. Tale interfaccia ha tutti i metodi per interagire con il DB, inclusi metodi come IQueryable All() che restituisce semplicemente il _dbSet del dato TEntity. –
bigmac
come su MemberTeam e MemberStatus - puoi modificarli direttamente o con classi parziali? – foson