采用传统的3层方法(不一定是3层):
UI BLL DAL
NHibernate如何适合?在大多数情况下,我看到人们允许NHibernate直接填充域对象/实体,这显然需要NHibernate对这些实体的引用.如果域实体是BLL的一部分,这似乎需要从DAL(NHibernate所在的位置)到BLL(域对象所在的位置)的引用.
这是否违背了分离每一层的典型思路,每层只依赖于它下面的层?我在这里错过了什么?
我可以举个例子,我通常将NHibernate与n层架构进行分层:
数据访问层
SessionFactory映射示例:
public class CategoryMap : ClassMap<Domain.Entities.Category>
{
public CategoryMap()
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
业务层
存储库的示例:
public class CategoryRepository : BaseRepository<Domain.Entities.Category>,
Domain.DataInterfaces.Business.Repositories.ICategoryRepository
{
public CategoryRepository(ISession session)
: base(session)
{
}
}
Run Code Online (Sandbox Code Playgroud)
基本存储库的示例:
public class BaseRepository<T> : IBaseRepository<T>
{
public ISession Session { get; set; }
public BaseRepository(ISession session)
{
Session = session;
}
}
Run Code Online (Sandbox Code Playgroud)
域层
因此,唯一引用NHibernate的层实际上是数据层和business(NHibernate.ISession).域层在所有层之间共享,并且不了解NHibernate.为简单起见,您可以将业务和数据层合并为一个层.我通常倾向于将它们分开,但这取决于项目规模.

如果你真的想要分离,我还建议你看一下依赖注入,以减少不同层之间的依赖关系.
希望对你有所帮助.
| 归档时间: |
|
| 查看次数: |
3358 次 |
| 最近记录: |