다음 두 메서드는 내 DB에서 데이터를 가져 와서 채워진 SelectList 개체 ("All"옵션 값 포함)를 반환하여 내보기로 전달합니다. 문제는 서로 다른 리포지토리 개체에 액세스하고 ID 이름 (StatusId 및 TeamId)이 다르다는 점과 거의 동일하다는 것입니다. 리파지토리를 매개 변수로 받아들이고 리다이렉션이나 람다 식을 사용하여 ID 이름이 무엇인지 파악하는 단일 메서드로 리팩토링 할 수있는 기회가 있다고 생각합니다. 이것을 달성하기 위해.하나의 메서드에 SelectList를 생성하는 두 개의 메서드를 리 팩터 처리합니다.
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;
}
이러한 방법을 하나의 방법으로 리팩터링하는 방법을 알아낼 수 있습니까?
이러한 클래스를 편집 할 수 있습니까? 즉 인터페이스를 추가 할 수 있습니까? –
예 ... _memberTeamRepostiory와 _memberStatusRepository 모두 IRepository 인터페이스를 구현합니다. 이 인터페이스에는 주어진 TEntity의 _dbSet을 단순히 리턴하는 IQueryable All()과 같은 메소드를 포함하여 DB와 상호 작용하는 모든 메소드가 있습니다. –
bigmac
MemberTeam과 MemberStatus는 직접 또는 부분 클래스로 수정할 수 있습니까? – foson