2011-01-04 3 views
4

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

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

+1

Первый вопрос, на который вы должны ответить: есть ли какая-либо польза от использования пользовательского репозитория и единицы работы с EF? Другие - это только детали реализации. –

ответ

3

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

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

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

+0

Единица работы не является транзакцией и не управляет транзакциями. –

+0

Не знаете, где вы получаете информацию от Ладислава ... Мартин Фаулер абсолютно считает Рабочую единицу работы сделкой. Он разместил на своем сайте здесь: http://martinfowler.com/eaaCatalog/unitOfWork.html Я согласен, что он не управляет транзакцией. Для управления транзакциями у вас должен быть диспетчер транзакций или в этом случае «Unit of Work Manager». Я хотел сказать, что транзакции и хранилища должны быть разделены. – Jason

+0

Хорошо, Джейсон. –

0

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

2

Учитывая следующие страницы я бы сказал, что консенсус МСА 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 руководства, а не simplfied блог 1 парня пример.

+0

В технической документации MS, на которую вы ссылаетесь, не обсуждаются шаблоны репозитория и шаблон UnitOfWork, а просто как проверить код. В то же время, они не дают никаких оснований, почему сочетание этих двух вместе улучшает тестируемость. Ликвидация для (слабого) доказательства властью. –

Смежные вопросы