gpt4 book ai didi

.net - 您如何使用 NHibernate 实现 3 层模型?

转载 作者:行者123 更新时间:2023-12-04 03:34:31 25 4
gpt4 key购买 nike

采用传统的 3 层方法(不一定是 3 层):

用户界面
BLL
达尔

NHibernate 如何适应?在大多数情况下,我看到人们允许 NHibernate 直接填充域对象/实体,这显然需要 NHibernate 对这些实体的引用。如果域实体是 BLL 的一部分,这似乎需要从 DAL(NHibernate 所在的位置)到 BLL(域对象所在的位置)的引用。

这难道不违背分离每一层的典型思想,每一层只依赖于它下面的一层吗?我在这里想念什么?

最佳答案

我可以给你举个例子,我通常如何与 NHibernate 分层以实现 n 层架构:

数据访问层

  • NHibernate SessionFactory
  • FluentNHibernate 的映射

  • 映射示例:
    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;
    }
    }

    域层
  • 数据接口(interface)(IRepository、IBaseRepository)
  • 实体:BaseEntity
  • 持久性(IEntity、IBaseEnity)

  • 因此,唯一引用 NHibernate 的层实际上是数据层和业务( NHibernate.ISession)。域层在所有层之间共享,不知道 NHibernate。为简单起见,您可以将业务和数据层合并为一层。我通常倾向于将它们分开,但这取决于项目规模。

    enter image description here

    如果你真的想要分离,我也建议你看看 dependency injection减少不同层之间的依赖关系。

    希望对您有所帮助。

    关于.net - 您如何使用 NHibernate 实现 3 层模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4855957/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com