我在应用程序启动时创建了一个List对象,并将它们保存为会话变量。
然后我在应用程序的整个生命周期中使用此会话变量。
有时我会在应用程序的其他层更新到此List,因此我想将此会话变量传递给其他层。
我应该将List对象从asp.net传递给方法中的其他层吗?我应该在所有图层中创建List的属性,这些图层将使用此对象并从表示层设置属性?如果我创建一个静态列表,则所有用户都会看到相同的列表我希望列表是特定于会话的。
答案 0 :(得分:4)
我会写你的应用程序的其他层来接受和返回对象列表,他们不应该知道或关心列表在完成后存储。
答案 1 :(得分:4)
不要将会话对象发送到数据层或其他业务逻辑。将这些事情分开的主要原因之一是,您可以在其他程序中重用代码。
一旦你添加一个依赖项,就像在HttpContext上一样,那么你也可以不拥有这些层,只需将它们全部放在一起。
关于列表本身,当您需要将数据传递到业务/数据层时,将其作为List发送。
最后,我建议除非在大量页面上使用该列表,否则根本不将它放在会话中,而只需在需要时从数据库中提取数据。必须在每次页面访问时序列化和反序列化会话数据。这增加了处理开销。如果您的应用程序处于负载平衡环境中会变得更糟,因为无论是否使用了会话数据,都必须通过网络线推送和拉取每个页面访问...这样可以完全消除任何原因使其进入会议无论如何。
但是,如果数据在大多数地方使用,那么我真的很好奇它是什么。会话不应该被用作一堆对象的倾倒场。而且我真的希望你不要试图存储像数据集,命令对象或类似的东西。
答案 2 :(得分:1)
我永远不会在DataAccess Layer或Business Layer中使用Session变量。这就像违背设计一样。我宁愿在数据访问层或业务层中的函数参数中传递会话变量的值,该参数旨在使用该Session变量
答案 3 :(得分:0)
使用以下代码可以使用您的Session变量:
HttpContext.Current.Session[....]
因此,您需要正确创建一个附加内容,以减少代码。