Если вы не используете шаблон Repository в своем слое Data , вы теряете время.
Цель UoW - обрабатывать изменения в нескольких экземплярах репозитория, это делается следующими способами:
- Единица работы выводится из фактического базового контекста (DataContext - L2SQL, ObjectContext / EF)
- Хранилища берут Единицу Работы в своем корте.
Единица работы делает две вещи:
- Есть
Commit()
метод
- Предоставление базового объекта / сущности, установленного для репозитория.
Немного сложно все настроить, но как только вы это сделаете, процесс должен выглядеть следующим образом:
- Контроллер получает услугу и единицу работы (оба через интерфейсы)
- Контроллер вызывает метод для службы ("CustomerServices.AddOrder ()")
- Метод вызова службы в репозитории
- Репозиторий вызывает метод «Добавить» для набора объектов / сущностей «Заказ»
- Контроллер фиксирует единицу работы
По сути, каждый слой получает экземпляр «следующего слоя» в своем конструкторе. Все должно быть DI 'и управляемым интерфейсом. UoW не полагается ни на что - но репозиторий полагается на него для сохранения во «внутренней памяти» (ORM), тогда UoW «Commit» выталкивает изменения в базу данных (в основном, обертывает метод «SaveChanges»).
Поскольку Единица работы относится к инфраструктуре / постоянству / базе данных / транзакциям, она должна перейти на уровень данных. На него должны ссылаться только контроллеры.
НТН.