EF4 - Хранилища и единицы работы - PullRequest
4 голосов
/ 05 января 2011

Я искал «правильный» способ интеграции репозиториев и единиц работы в свой проект, но я продолжаю сталкиваться с различными вариантами. Некоторые имеют репозитории как члены объекта uow. Другие имеют репозитории, реализующие интерфейс IUnitOfWork. Я видел кое-что, где объект uow передается в репозитории в качестве аргумента их конструкторам.

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

Ответы [ 3 ]

3 голосов
/ 05 января 2011

Я не могу сказать, что существует консенсус, но помимо того, что я поговорил со многими архитекторами на эту тему, я потратил значительное количество времени, оценивая эту самую вещь.Я пришел к выводу, что вы хотите, чтобы управление объектами (репозитории) и транзакции (UnitOfWork) были слабо связаны и не зависели друг от друга.Ваш репозиторий должен быть в состоянии работать без использования транзакции и наоборот.С точки зрения своего отношения к репозиторию, единица работы на самом деле является просто оболочкой для транзакции.В вашем случае вы, вероятно, будете оборачивать операции репозитория EF2 с помощью реализации TransactionScope.В нашей структуре мы поместили управление транзакциями в пространство имен / проект DataServices, а наши базовые классы репозитория в пространство имен / проект ObjectAccess.Оттуда мы создали реализацию EF2 как для операций с репозиторием, так и для операций с единицами работы.Я не могу дать вам источник, но в основном я сделал следующее:

  • Использовал бета-версию NCommon 1.1 в качестве отправной точки: NCommon
  • РазвязанЕдиница работы из операций репозитория в NCommon
  • Затем я перешел к тому, как нужно управлять моим ObjectContext.

Мы собираемся выпустить нашу первую стабильную версию этого фреймворка.Удачи!

2 голосов
/ 02 ноября 2011

Учитывая следующие страницы, я бы сказал, что MS-консенсус - это UnitOfWork, предоставляющий репозитории:

http://www.asp.net/entity-framework/tutorials/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

http://msdn.microsoft.com/en-us/library/ff714955.aspx

Кажется, что оба - руководство MS, а не упрощенный пример поста 1 парня.

0 голосов
/ 05 января 2011

Не существует «правильного» способа сделать это. Найдите реализацию, которая подходит для вашей ситуации, и используйте ее. Лично мне нравится, чтобы все было просто, поэтому я просто использую общий репозиторий во всех моих проектах (вообще без интерфейса / шаблона UoW).

...