2012-03-27 2 views
4

Я использую EF4.3.1 в .Net4.0 веб-формах (а не MVC!).IUnitOfWork как использовать - наилучшая практика

Я обычно использую шаблон хранилища с интерфейсом IUnitOfWork. Но мне интересно, следую ли я лучшим практикам, тем более, что большинство примеров, которые я использовал, основаны на приложениях MVC.

Я скажу, что это всего лишь небольшое веб-приложение, так что это может повлиять на выбор решения.

Решение в настоящее время имеет 3 проекта, модель, логику и сайт. Модель содержит объекты codefirst и интерфейс IUnitOfWork. Логика содержит репозитории и уровень обслуживания. Сайт, очевидно, содержит веб-сайт, codebehind и т. Д.

Я не использую стороннюю утилиту для инъекций (ninject и т. Д.). Я вручную вводить хранилища со IUnitOfWork т.е.

общественного BookingRepository (IUnitOfWork UnitOfWork)

я менее ясно, что делать со слоями обслуживания, если IUnitOfWork также exisit в проекте сайта, или существует только в Уровни логики и модели.

В настоящее время я впрыснуть хранилище и единицы работы в службу т.е.

общественного BookingService (IUnitOfWork UnitOfWork, IBookingRepository хранилище, IAppSettings AppSettings)

Но это означает, что совершали (сохранить в БД) делается на уровне Сайта, но мне интересно, следует ли это делать на уровне сервиса. Это также означает, что, поскольку мой IUnitOfWork объявлен в моем модельном слое, мне также нужна ссылка на Model на моем сайте.

Что я могу сделать лучше? Я что-то делаю правильно? lol

+0

IUnitOfWork не следует передавать в репозиторий, только в службу. См. Пример здесь http://stackoverflow.com/questions/9808577/multiple-generic-repositories-in-unitofwork/9809550#9809550 –

ответ

3

Дмитрий прав. Вот пример внедрения Единицы работы. Преимущество здесь состоит в том, что блок рабочей схемы координирует работу нескольких репозиториев, применяя один класс контекста базы данных, общий для всех.

Это хороший ресурс для того, чтобы начать понимать, как эти шаблоны могут использоваться вместе. Он действителен для разработки MVC и веб-форм. Implementing the Repository and Unit of Work Patterns in an ASP.NET MVC Application

public class UnitOfWork : IDisposable 
{ 
    private DbContext _context; 
    private PersonRepository _personRepository; 
    private CompanyRepository _companyRepository; 

    public UnitOfWork(DbContext context) 
    { 
     this._context = context; 
    } 

    public void Commit() 
    { 
     _context.SaveChanges(); 
    } 

    // We lazy-load our repositories... 
    public PersonRepository PersonRepository 
    { 
     get 
     { 
      if (this._personRepository == null) 
      { 
       this._personRepository = new PersonRepository(context); 
      } 
      return _personRepository; 
     } 
    } 

    public CompanyRepository 
    { 
     get 
     { 
      if (this._companyRepository == null) 
      { 
       this._companyRepository = new CompanyRepository(context); 
      } 
      return _companyRepository; 
     } 
    } 

    //IDisposable implementation removed for brevity... 
} 
Смежные вопросы