我应该在哪里保存复杂的MVC应用程序UI状态?

时间:2009-01-14 17:28:20

标签: model-view-controller design-patterns user-interface frameworks

我一直在看几个MVC框架(比如rails,merb,cakephp,codeignitier和similars ......)

我见过的所有样本基本上都是简单的CRUD页面,包含了查询字符串和发布字段值中所需的所有信息。

我有几个使用经典asp构建的框架制作的应用程序。

这个框架处理一些CRUD的东西比我找到的例子稍微复杂一点。

类似于主要细节,通过示例过滤,分页,排序和类似物。

我有一个控制器类,它只是一个有限状态机,通过不同的状态(如new,browse,filter,show等),然后根据引发的事件执行适当的操作,最后检索neede信息到呼叫页面。

为了达到这个目的,我有几个隐藏的输入来保持网页的状态(比如当前的id,过滤标准,订单标准,以前的状态,以前的事件,好吧,你明白了)

您认为实现这种功能的最终方法是什么?

隐藏的输入内置在视图中并从控制器中使用??? (我想这相当于我现在在classi asp中所做的事情)

-

(为回应tvanfosson而添加)

基本上,我的问题是指第三类,依赖于上下文的设置(关于我同意你的其他两个类别)我存储在隐藏字段中的信息,以便将它们存储在查询字符串中,我想当你单击“下一页”,你包含了在查询字符串中保存所需的一切,对吧?以便在每个执行某种操作的链接中附加一条查询字符串...

我不确定,使用查询字符串而不是隐藏输入有什么优缺点???

1 个答案:

答案 0 :(得分:2)

我根据实际数据的特征使用不同的策略。作为首选项的东西,如默认页面大小,我保留在与当前登录用户关联的Preferences对象(表)中,并在需要时从那里检索。

与当前登录相关联的持久性设置(如页面的过滤器设置)存储在用户的会话中。通常这些是如果用户在当前会话中设置它们,它们应该保持粘性。我认为过滤器设置和可见性是这样的。如果我过滤列表,请远离它以深入查看特定项目,然后返回列表,我希望重新应用我的过滤器设置 - 所以我将其作为会话的一部分。

与上下文相关的设置(如当前排序列或页码)使用查询参数进行控制。分页控件(链接)使用适当的查询参数构建,以便在单击时“执行正确的操作”并传递任何必要的查询参数以维护或更新控件的当前上下文。使用查询参数允许您使用HTTP GET,它是可收藏的,而不是POST。使用隐藏的表单参数会使用户更难以保存或输入将其直接带到他们想去的地方的URL。这对于排序可能比分页更有用,但原则同样适用。

相关问题