Quick Q для вас, специалисты по дизайну.Единица работы и L2S DataContext
Я хочу, чтобы шаблон хранилища, который был отключен от фактической технологии доступа к данным, пока я еще не решил, и я хочу, чтобы он был гибким. Таким образом, это могут быть L2S, L2E, NHibernate, Lightspeed или что-то еще.
Но я смущаюсь об этой вещи UnitOfWork.
В мире L2S это, кажется, ваш DataContext.
Но как насчет мира, отличного от L2S, представьте, что я использовал, например, написанный вручную SQL.
Мой вопрос: кто что делает? В моем методе Repo.Save() следует ли это вызвать UnitOfWork.Commit, который затем генерирует требуемый INSERT/UPDATE SQL?
Не ожидая определенного ответа, но какое-то обсуждение было бы хорошим, просто чтобы убедиться, что я на правильном пути!
Благодаря
Некоторые вещи не соответствуют этому подходу. 1) Технология persistence просочилась в домен с помощью DataContext (L2S). 2) DataContext можно использовать вне контекста репозитория, клиенты могут просто использовать DataContext для генерации собственных запросов, поэтому нет необходимости в репозитории. – 2009-11-07 05:57:49
Контейнер IoC может решить обе эти проблемы. IUnitOfWork просто нужен метод SubmitChanges, что означает, что клиенты, которые его используют, не будут иметь доступ к контексту данных. Вы можете реализовать IUnitOfWork в частичном классе DataContext. Затем для репозиториев они должны быть разрешены из контейнера IoC через интерфейсы. Конкретные реализации этих репозиториев могут иметь конкретный класс DataContext, вводимый через их конструкторы. – mvr