谁需要在会话中保存数据

时间:2009-08-13 17:41:12

标签: asp.net-mvc architecture session-state

我使用asp.net mvc框架构建一个小应用程序。我有一个问题。我构建了应用程序的n层结构(控制器 - >服务层 - >存储库层),并创建了一个用于从用户收集数据的wizzard。来自存储库(数据层)的一些数据需要保存用于下一步(例如当用户按下wizzard上的按钮时),这不是用户输入的数据。出于某种原因,我需要从存储库缓存此数据(在按下后退按钮时删除)。对于我的应用程序,我将在会话中保存此数据,我不知道谁必须保存此数据。一方面它必须是服务层 - 我需要向他发送sessionstatewrapper。但是对于应用程序的业务逻辑 - 对于服务层,我需要从wizzard发送所有数据并将这些数据分开以用于某些步骤,这只是收集数据和处理这些数据的不同视图 - 它是表示层(例如控制器)的工作。有任何帮助的想法吗?

P.S。抱歉我的英文=)

4 个答案:

答案 0 :(得分:1)

我想说这是前端应该照顾的事情。您的服务层不应该担心这个数据是在向导中收集的事实,而是一个基于Web的向导,因此您的前端是无状态的。考虑一下:你会做什么,它是一个基于Windows的应用程序?你的“前端”会为你维持这个状态。

但这只是我的 $ 0.02 ......

答案 1 :(得分:1)

似乎你有一个相当复杂的应用程序。由于您似乎不熟悉您正在使用的MVC框架,我建议您从非常简单的事情开始。这意味着,例如,您不会将数据保存到最后。警告您的用户,同时了解您正在使用的MVC的最大值。当您有足够的知识时,请返回并添加该功能。

BTW,在MVC中:

  • M是模型,您从文件,数据库,标准输入等获取的数据
  • V是视图,表示层。它显示数据,它是前端。
  • C是Controller,它控制应用程序中的所有内容。它从模型中获取数据,处理数据,将其发送到视图,等待响应,从视图中获取响应,处理响应,然后采取相应的行动。

我的2美分是你应该让Controller负责向导的状态。

答案 2 :(得分:1)

是否要求将其保存在会话中,或者将其保存在服务器的内存中。

在您的情况下,我会使用Enterprise Library Caching应用程序块。使用此功能,您可以创建Key / Value对的缓存,其中键是用户ID,值是包含您要存储的信息的对象。

使用EntLib,您可以从应用程序中最有意义的层访问信息,并且无需担心何时可以访问会话状态。

修改

将会话数据的存储放在模型中。该模型负责管理数据。视图向用户和控制器控件显示数据。

答案 3 :(得分:0)

如果您通过向导来回传递数据,我首先想到的是TempData。这正是它的一个用途 - 您需要将某些内容持久保存到下一个(或上一个)页面,每个步骤。当然,由于TempData使用Session,如果你需要直接使用Session,那么在一天结束时,它总是一个选项。

这是控制器应管理的类型。您的服务和存储库层应该为控制器提供它需要的任何数据,但控制器本身应该在整个向导中管理这些数据的持久性。如果您将其视为向导页面的“查看数据”(我不知道这是否代表您的数据,但可能是这样),这可能会更清楚地说明系统的哪一层应该负责它