다음 값이 될 수있는 상태 변수를 받아들이는 List라는 컨트롤러 POST 작업이 있습니다 { "all", "active", " .} 비활성 그럼 난 컨트롤러의 내부에서 "상태"의 값에 따라 저장소에 전화를했다 컨트롤러는이처럼 보였다 :.리포지토리 기능을 확장하는 서비스로 컨트롤러 논리를 추출하는 것이 좋습니다
[HttpPost]
public ActionResult List(string status)
{
return View(GetJobTitlesByStatus(status));
}
private IList<JobTitle> GetJobTitlesByStatus(string status)
{
IList<JobTitle> jobTitles;
switch (status)
{
case "All":
jobTitles = jobTitleRepository.GetAll();
break;
case "Active":
jobTitles = jobTitleRepository.GetActive();
break;
case "Inactive":
jobTitles = jobTitleRepository.GetInactive();
break;
default:
jobTitles = new List<JobTitle>();
break;
}
}
내가 스위치 문에서 코드가 내부에 너무 많은 것을 결정 컨트롤러의 내용을 추출하여 서비스로 추출한 다음이 서비스가 적절한 리포지토리 호출을 생성합니다 (예 :
public class JobTitleService : JobTitleRepository, IJobTitleService, IJobTitleRepository
{
public JobTitleService(ISession session) : base(session) { }
public IList<JobTitle> GetJobTitlesByStatus(string status)
{
IList<JobTitle> jobTitles;
switch (status)
{
case "All":
jobTitles = base.GetAll();
break;
case "Active":
jobTitles = base.GetActive();
break;
case "Inactive":
jobTitles = base.GetInactive();
break;
default:
jobTitles = new List<JobTitle>();
break;
}
return jobTitles;
}
}
).
저는 개인적으로 의존성 주입을 사용하여 컨트롤러에 서비스를 제공하기 때문에 이것이 훌륭하게 작동한다고 생각합니다. 다음과 같은 질문이 있습니다 :
1) 컨트롤러에서 switch 문 논리를 추출하는 것이 좋습니다.
2) JobTitleService를 JobTitleRepository에서 상속받는 것이(종속성 주입을 사용하여 서비스의 생성자로 전달 된 IJobTitleRepository를 갖는 것)보다 낫다고 생각합니까?
3) JobTitleService에 사용되는 디자인 패턴에 특별한 이름이 있습니까?
흠. 좋은 질문에 대한 크레딧이 없습니까? 롤. – SideFX