在ASP中避免使用状态管理技术是个好主意吗?净MVC

本文关键字:好主意 MVC 技术 管理 ASP 状态 | 更新日期: 2023-09-27 18:10:59

在ASP中避免状态管理技术(会话,cookie等)是个好主意吗?Net MVC 3.0?

如果是,那么除了TempData还有其他可用的替代方案吗?

在ASP中避免使用状态管理技术是个好主意吗?净MVC

这取决于您的具体需求。例如,会话状态和cookie是非常不同的东西。

如果会话状态很适合你在WebForms中的需求,那么它也很适合MVC。在MVC中没有特别的理由不使用它。

你基本上只有3个地方可以存储数据,在客户端(cookie/隐藏值/查询字符串),在服务器(会话/缓存/静态),在数据库中。

关于所有这些方法的优缺点都有大量的文档,一个好的起点是:

http://msdn.microsoft.com/en-us/library/z1hkazw7.aspx

看情况。

会话和cookie是为了解决某种问题而发明的,所以它们应该被用来解决那个问题。

TempData在替换cookie方面没有多大帮助-因为cookie保存在客户端。TempData也是Session,区别在于TempData只用于重定向。只要TempData在重定向场景中非常有用,您可能希望为这些场景保持会话启用。

如果你没有面向会话的场景(比如对象创建有多个步骤,第一步之后你还不能将其保存到数据库中),你可以避免使用它,但通常它本身并不是邪恶的。

我发现在实现存储库模式时,在缓存中很好地维护了状态。在MVC Futures项目中,也有Html。Serialize方法,它提供' viewstate like'状态存储。http://mvccontrib.codeplex.com/

对于绑定到组合框的项之类的信息,我们习惯于在web表单中为我们自动维护,这里一个很好的替代方法是调用数据存储库。存储库维护对缓存的引用(理想情况下是通过您创建的接口,如ICache)。然后存储库根据当前用户名、密钥等来缓存这些数据。有些人更喜欢服务层缓存,但我觉得设计一个存储库层就是为了这个目的。

Session仍然被使用——如果你必须的话——它有它的位置。很多"坏"围绕着会话,但如果你需要存储会话特定信息,并且你的网站不关心每天的大量点击,那么你可能会接受点击。

TempData非常适合存储状态消息,以便在下一个请求中显示,例如"记录已成功保存",这样您就不会在重定向中丢失它,也不必在querystring上传递它。这是我使用它的唯一原因,尽管有些人使用它来存储数据,以便在下一个请求时重新绑定。

依我看,MVC中的会话状态规则与WebForms中的规则是一样的:如果你必须使用它,但要保持你的使用轻量级。如果您确实需要跟踪每个用户/会话的数据,则没有必要重新发明轮子。

您可以直接在数据库中保存您的状态