У меня есть приложение C # MVC, которое я разбиваю следующим образом: Представление -> Контроллер -> Служба -> Репозиторий
Я использую практику тонкого контроллера, при этом каждое представление имеет уникальную модель представления, возвращаемую соответствующей службой.
Быстрый пример: View: / NewAppointment / Step1
Его контроллер будет выглядеть так:
public ActionResult Step1()
{
return View(_appointmentService.Step1GetModel() );
}
А уровень службы встреч будет выглядеть следующим образом:
public Step1Model Step1GetModel()
{
return new Step1Model();
}
Таким образом, в моем приложении используется несколько различных уровней служб, каждый из которых реализует отдельный интерфейс.
Мой вопрос возникает, когда мне нужно, чтобы один уровень сервиса взаимодействовал с другим уровнем сервиса. В этом случае лучше ли передать ссылку на интерфейс вызову службы, или я должен позволить контроллеру обрабатывать сбор всех данных и затем передавать соответствующие результаты обратно службе?
Пример:
Скажем, я хочу по умолчанию заполнить мою модель представления информацией о клиенте. Я вижу два способа сделать это:
Передать ссылку на интерфейс клиента службе записи на прием, а затем позвольте службе записи на прием вызвать соответствующий метод GetCustomer в службе поддержки клиентов ...
В коде:
private ICustomerService _customerService;
private IAppointmentService _appointmentService;
public ActionResult Step1()
{
var viewModel = _appointmentService.Step1GetModel( _customerService );
return View(viewModel);
}
ИЛИ
Позвольте контроллеру обработать логику получения клиента, а затем передать этот результат службе приема заявок .
В Кодексе:
private ICustomerService _customerService;
private IAppointmentService _appointmentService;
public ActionResult Step1()
{
var customer = _customerService.GetCustomer();
var viewModel = _appointmentService.Step1GetModel( customer );
return View(viewModel);
}
Я не понимаю, что было бы лучше. Первый обеспечивает удобство и тонкость контроллера, но создает взаимозависимость между службами назначения и службой поддержки клиентов. Второй добавляет больше логики в контроллер, но сохраняет полную независимость сервисов.
У кого-нибудь есть мысли, что было бы лучше?
Спасибо ~