У меня было действие POST контроллера, которое называется List, которое принимает переменную состояния, которая может принимать следующие значения: {"all", "active", "notactive}. Затем я сделал вызовы репозитория на основе значения" status " "внутри контроллера. Контроллер выглядел так:
[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;
}
}
Я решил, что код в операторе switch слишком велик, чтобы находиться внутри контроллера, поэтому я извлек это в службу, и эта служба затем выполняет соответствующие вызовы репозитория. Например:
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?