美好的一天。我必须将会话值传递给业务逻辑层,我可以将它从表示层传递给函数,但是如何直接在业务逻辑层中访问它?将它直接传递给业务逻辑层(如
)也是一种很好的方法GetMyRecords(Count,Session["userID"].toString()); ?
答案 0 :(得分:3)
根据John上面的回复,您理想情况下不希望访问业务层中的任何UI元素。 您应该将会话值从表示层传递到业务层,以便业务层只知道值 - 而不是它们的来源。
关于如何从表示层传递值的第二点 我建议您至少将Session [“userID”]。toString())包装为表示层中的属性。 因为它是一个属性,所以如果需要,你可以添加检查/验证逻辑。
此外,我发现拥有一个包装器SessionWrapper类并在应用程序中使用它来访问会话值更清晰。这样做的好处是,如果你的会话持久性发生变化,它通常会改变一个地方。当然,这不是必需的,因为即使您创建自己的提供程序,也可以通过配置插入.NET会话提供程序。
答案 1 :(得分:2)
我建议不要在业务逻辑层中访问Session
。具有单独层的意图是它们用于不同目的。例如,业务逻辑层通常不应包含对用户界面技术的任何引用,例如,在这种情况下Session
。
从表示层(也称为UI层)到业务层期望的转换应该在表示层中完成。谁知道?也许下周你的老板要求你将业务逻辑从该Web服务器移到应用服务器上,并在它们之间使用基于WCF的通信。
即使你不知道明天会是怎样的,明确的分离会让更多(全部?)的路径为明天开放。