Я впервые с DDD, так что я новичок! Итак, давайте это очень просто: D
Я разработал приложение, используя asp.net mvc 2, ddd и nhibernate. У меня есть модель предметной области в библиотеке классов, мои репозитории в другой библиотеке классов и приложение asp.net mvc 2. Мой базовый класс репозитория, у меня есть конструкция, которую я внедряю и зависимость (мой уникальный объект ISessionFactory запущен в global.asax), код:
public class Repository<T> : IRepository<T>
where T : Entidade
{
protected ISessionFactory SessionFactory { get; private set; }
protected ISession Session
{
get { return SessionFactory.GetCurrentSession(); }
}
protected Repository(ISessionFactory sessionFactory)
{
SessionFactory = sessionFactory;
}
public void Save(T entity)
{
Session.SaveOrUpdate(entity);
}
public void Delete(T entity)
{
Session.Delete(entity);
}
public T Get(long key)
{
return Session.Get<T>(key);
}
public IList<T> FindAll()
{
return Session.CreateCriteria(typeof(T)).SetCacheable(true).List<T>();
}
}
И после того, как у меня появятся специальные хранилища, вроде этого:
public class DocumentRepository : Repository<Domain.Document>, IDocumentRepository
{
// constructor
public DocumentRepository (ISessionFactory sessionFactory) : base(sessionFactory)
{ }
public IList<Domain.Document> GetByType(int idType)
{
var result = Session.CreateQuery("from Document d where d.Type.Id = :IdType")
.SetParameter("IdType", idType)
.List<Domain.Document>();
return result;
}
}
В этом коде нет управления транзакциями, и он работает нормально, но я хотел бы сделать что-то для управления этими репозиториями в моем контроллере asp.net mvc, что-то простое, например:
using (var tx = /* what can I put here ? */) {
try
{
_repositoryA.Save(objA);
_repositoryB.Save(objB);
_repositotyC.Delete(objC);
/* ... others tasks ... */
tx.Commit();
}
catch
{
tx.RollBack();
}
}
Я слышал о NHibernateUnitOfWork, но я не знаю :(, Как я могу настроить NHibernateUnitOfWork для работы с моими репозиториями? Должен ли я изменить мой простой репозиторий? Предложения приветствуются!
Так что, спасибо, если кто-то прочитал здесь! Если можете мне помочь, я оцениваю!
PS: простите за мой английский!
пока = D