Я разрабатываю приложение MVC, использую Unity для IoC. Мое приложение в основном состоит из слоя пользовательского интерфейса, уровня обслуживания и уровня репозитория.Рекомендации по IoC в сложном слое обслуживания
Мой типичный контроллер:
public class TestController : Controller
{
private ITestService testServ;
public TestController(ITestService _testServ)
{
testServ= _testServ;
}
public ActionResult Index()
{
testServ.DoSomething();
return View();
}
}
Ничего необычного, каждый из моих контроллеров не объект службы впрыскивается. Таким образом, мои объекты уровня обслуживания выполняют сложные бизнес-правила, объединяющие информацию из разных хранилищ. Используя IoC, я нахожу, что мои конструкторы выглядят чересчур сложными, но поскольку служба требует доступа ко многим репозиториям, я не вижу никакого способа обойти это.
Типичный класс в моем слое сервиса будет выглядеть следующим образом:
public class TestService : ITestService
{
private ITransactionRepository transRepo;
private IAccountRepository accountRepo;
private ISystemsRepository sysRepo;
private IScheduleRepository schRepo;
private IProfileRepository profileRepo;
public TestService(ITransactionRepository _transRepo;
IAccountRepository _accountRepo;
ISystemsRepository _sysRepo;
IScheduleRepository _schRepo;
IProfileRepository _profileRepo)
{
transRepo = _transRepo;
accountRepo = _accountRepo;
sysRepo = _sysRepo;
schRepo = _schRepo;
profileRepo = _profileRepo;
}
public DoSomething()
{
//Implement Business Logix
}
}
Несколько моего объект службы слоя требуется 10 или более хранилищ. В моем хранилище используется Entity Framework, где каждый класс репозитория предоставляет таблицу в базовом хранилище данных.
Я ищу советы по наилучшей практике в ситуации, описанной выше.
Ищите советы по IoC или на контейнерах DI (Unity - это позже)? – Carsten
BTW: если ваша служба «Service» имеет много зависимостей, она, вероятно, делает * много * (S в SOLID) - возможно, вы можете разделить службу на ее настоящие обязанности - скорее всего, вы можете дать результаты лучше имени, чем * Сервис * тоже;) – Carsten