Entity Framework UnitOfWork

Я использую шаблон UnitOfWork с EF 4, и мне просто интересно, где должна жить реализация EFUnitOfWork? Должен ли он жить на уровне репозитория? У меня есть все мои интерфейсы на уровне домена. Это звучит правильно?

Я использую Ninject для внедрения репозиториев с помощью IUnitOfWork.

Я думаю, это действительно не имеет значения, поскольку вы не собираетесь действительно тестировать свои репозитории EF, верно?

Другой вариант — разместить его на уровне данных, где находятся модели и контекст EF.

Имея его на уровне репозитория, этому слою теперь нужна ссылка на System.Data.Entity. Плохо или нормально?


person Sam    schedule 08.03.2011    source источник


Ответы (2)


Следуя DDD, вы, как правило, хотите, чтобы в вашем решении был проект ProjectName.Core. В этом проекте структура будет следующей:

  • ProjectName.Core -> Репозиторий (все интерфейсы вашего репозитория)

  • ProjectName.Core -> DomainModel

  • ProjectName.Core -> Инфраструктура -> IUnitOfWork (интерфейс uow)

  • ProjectName.Core -> Infrastructure -> DtatAccess (реализации репозитория и всех файлов, связанных с базой данных, включая реализацию uow)

Иногда, если проект достаточно велик, я добавляю в свое решение еще один проект с именем ProjectName.Infrastructure.DataAccess и помещаю все реализации DataAccess в этот проект.

person Paul    schedule 08.03.2011

Обычно реализация находится на уровне репозитория по причинам удобочитаемости/понимания. Я не вижу никаких проблем с наличием ваших интерфейсов на уровне домена.

Вы даже можете иметь что-то подобное, как показано ниже

 - Domain
   ->Interfaces
   ->Repository
      -> Actual Implementation 

Однако, как вы сказали, на самом деле не имеет значения, где находится фактическая реализация. Однако другим будет легко понять поток, если вы правильно организуете структуру.

person sajoshi    schedule 08.03.2011
comment
Я не уверен, что вам нужна реализация на уровне домена, так как тогда ему нужно будет ссылаться на dll System.Data.Entity, и я хочу, чтобы мой уровень домена не знал об EF. Правильный? - person Sam; 08.03.2011