【问题标题】:NHibernate session in BusinessLogic with lazy loading具有延迟加载的 BusinessLogic 中的 NHibernate 会话
【发布时间】:2012-05-14 01:05:41
【问题描述】:
我目前正在开发一个中型应用程序。该应用程序将具有具有不同表示层的 n 层结构。其中一部分是 Web 应用程序,但很可能会有其他部分处理,例如传感器通信(目前尚不清楚如何开发它)。
我的问题是是否可以在业务逻辑层中直接使用 NHibernate,并让业务逻辑在延迟加载时为上层和水平层/部分提供请求的数据。
是否可以在业务层初始化会话并且仍然有延迟加载?在这种情况下,会话将如何处理?是否可以将请求的数据与会话一起包装,以便只要对象处于活动状态,会话就处于活动状态?
祝你有美好的一天。
【问题讨论】:
标签:
c#
nhibernate
session
n-tier-architecture
business-logic
【解决方案1】:
不确定我是否完全理解您的问题,但根据我收集到的信息,您问的是当您的客户端不是网络客户端时是否可以使用延迟加载。
答案是肯定的; Session 的初始化方式或位置无关紧要。
直接在业务层使用 nHib 被一些人(包括我自己)认为是最佳实践。
关于“将请求的数据与会话包装在一起,以便只要对象处于活动状态,会话就处于活动状态”的问题-
我不确定你的意思,但如果你的意思是发送你的模型类和会话,以便你的客户可以懒惰地加载他们的属性——我强烈建议不要去那里。
经验法则是,您仅向客户提供其需要的东西,仅此而已。
(关于此的 Ayende elaborates。)
出于这个原因,我认为您应该始终使用 DTO 与您的客户沟通。
我的设置方式是:
客户端从服务器请求数据 => 服务器加载对象(但不初始化延迟加载的属性),填充 DTO 并将其返回给客户端。
客户端请求延迟加载属性 => 服务器加载对象(使用 nHib 的第二级 cache 或其他缓存机制),加载请求的属性并将 DTO 返回给客户端。