Я могу привести пример того, как я обычно работаю с NHibernate для n-уровневой архитектуры:
Уровень доступа к данным
Пример для сопоставления:
public class CategoryMap : ClassMap<Domain.Entities.Category>
{
public CategoryMap()
{
...
}
}
Бизнес-уровень
- Репозитории: BaseRepository
Пример хранилища:
public class CategoryRepository : BaseRepository<Domain.Entities.Category>,
Domain.DataInterfaces.Business.Repositories.ICategoryRepository
{
public CategoryRepository(ISession session)
: base(session)
{
}
}
- BaseRepository (CRUD, GetById, GetAll)
Пример базового репозитория:
public class BaseRepository<T> : IBaseRepository<T>
{
public ISession Session { get; set; }
public BaseRepository(ISession session)
{
Session = session;
}
}
Доменный уровень
- DataInterfaces (IRepository, IBaseRepository)
- Объекты: BaseEntity
- Сопротивление (IEntity, IBaseEnity)
Итак, единственный уровень, который ссылается на NHibernate, на самом деле это уровень данных и бизнес (NHibernate.ISession
). Доменный слой является общим для всех слоев и не знает о NHibernate. Для простоты вы можете объединить бизнес и уровень данных в один слой. Я, как правило, разделяю их, но это зависит от размера проекта.
Если вы действительно хотите разделить, я также предлагаю вам посмотреть внедрение зависимостей , чтобы уменьшить зависимости между различными уровнями.
Надеюсь, это поможет вам.