0

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

PS对不起我的英语=)

4

4 回答 4

1

我会说这是前端应该处理的事情。您的服务层不必担心这些数据是在向导中收集的,并且它是基于 Web 的向导,因此您的前端是无状态的。考虑一下:如果是基于 Windows 的应用程序,您会怎么做?您的“前端”将为您维护状态。

但这只是我的0.02 美元...

于 2009-08-13T17:48:04.163 回答
1

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

顺便说一句,在 MVC 中:

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

我的 2 美分是您应该让控制器负责向导的状态。

于 2009-08-13T17:51:19.383 回答
1

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

在您的情况下,我会使用企业库缓存应用程序块。有了这个,您可以创建键/值对的缓存,其中键是用户 ID,值是包含您要存储的信息的对象。

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

编辑

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

于 2009-08-13T17:52:50.750 回答
0

如果您通过向导来回传递数据,我首先想到的是 TempData。这正是它的用途之一——您只需要在每一步都将某些内容保存到下一页(或上一页)。当然,由于 TempData 使用 Session,最终如果您需要直接使用 Session,它始终是一个选项。

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

于 2009-08-13T18:04:09.210 回答