Является ли передача ссылки на сервис на другой уровень сервиса плохой практикой?

У меня есть приложение 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);
}

Я не понимаю, что было бы лучше. Первый обеспечивает удобство и тонкость контроллера, но создает взаимозависимость между службами назначения и службой поддержки клиентов. Второй добавляет больше логики в контроллер, но сохраняет полную независимость сервисов.

У кого-нибудь есть мысли, что было бы лучше?

Спасибо ~

6
задан PleaseStand 1 December 2010 в 03:46
поделиться