我目前正在开发一个中型应用程序。该应用程序将具有具有不同表示层的 n 层结构。其中一部分将是一个 Web 应用程序,但很可能会有其他部分处理,例如传感器通信(目前尚不清楚如何开发它)。
我的问题是是否可以在业务逻辑层中直接使用 NHibernate,并让业务逻辑在延迟加载时为上层和水平层/部分提供请求的数据。
是否可以在业务层初始化会话并且仍然具有延迟加载?在那种情况下,会话将如何处理?是否可以将请求的数据与会话一起包装,以便只要对象处于活动状态,会话就处于活动状态?
祝你今天过得愉快。
我目前正在开发一个中型应用程序。该应用程序将具有具有不同表示层的 n 层结构。其中一部分将是一个 Web 应用程序,但很可能会有其他部分处理,例如传感器通信(目前尚不清楚如何开发它)。
我的问题是是否可以在业务逻辑层中直接使用 NHibernate,并让业务逻辑在延迟加载时为上层和水平层/部分提供请求的数据。
是否可以在业务层初始化会话并且仍然具有延迟加载?在那种情况下,会话将如何处理?是否可以将请求的数据与会话一起包装,以便只要对象处于活动状态,会话就处于活动状态?
祝你今天过得愉快。
不确定我是否完全理解您的问题,但从我收集的信息来看,您问的是当您的客户端不是 Web 客户端时是否可以使用延迟加载。
答案是肯定的;Session
初始化 的方式或位置无关紧要。
一些人(包括我自己)认为直接在业务层中使用 nHib 是最佳实践。
关于您关于“将请求的数据与会话包装在一起,以便只要对象处于活动状态,会话就处于活动状态”的问题 -
我不确定您的意思,但如果您的意思是与会话一起发送您的模型类,那么您的客户可以懒惰地加载他们的属性 - 我强烈建议不要去那里。
一个经验法则是,你只给客户它需要的东西,仅此而已。
(Ayende对此进行了详细说明。)
因此,我认为您应该始终使用 DTO 与您的客户进行交流。
我设置的方式是:
客户端从服务器请求数据 => 服务器加载对象(但不初始化延迟加载的属性),填充 DTO 并将其返回给客户端。
客户端请求延迟加载属性 => 服务器加载对象(使用 nHib 的二级缓存或其他缓存机制),加载请求的属性并将 DTO 返回给客户端。