MVC向导应用程序的模式

时间:2013-03-05 17:58:13

标签: design-patterns asp.net-mvc-4

在ASP.NET MVC应用程序中,我正在为每个屏幕/视图/页面中的许多不同字段组成的逐步信息收集序列创建向导。

我打算在后台异步保存信息。

模式建议是什么:

1.基于向导的序列本身?

2.增量保存信息?

在ASP.NET MVC中是否存在类似于这些应用程序的典型向导的推荐/模板?

1 个答案:

答案 0 :(得分:0)

我是一个Java人,但我认为我会分享一种方法,我采用最近的向导类型流程,这可能很有用。

首先,流程中的某些页面仅适用于其他页面的输入,整个过程主要依赖于可能发生变化的后端数据(例如,用户启动过程,将其保存为草稿并返回到但是现在后端数据发生了变化,现在需要一些以前不需要的用户输入。)

为了处理所有这些,我将后端代码与页面流分离 - 后端代码(也称为服务层)不知道用户在哪个页面上,不知道哪些字段在哪些页面上而且没有想知道将用户发送到下一页的页面。它所做的只是通过浏览向导来验证用户填充的整个数据结构(无论用户是否已经获得了部分数据结构)。验证失败的每个数据元素都附加了一个错误。前端代码(即控制器层)简单地查找这些错误并确定可以解决任何错误并将用户发送到该页面的页面序列中的第一页。如果用户刚刚发布了该页面(并且服务层已向该页面上的字段表示的数据元素添加了错误),则会显示错误消息(当然,我们只想显示字段的用户错误)他们已经看到,在向导的第一次访问的页面上首次向他们看到的字段显示错误会有点粗鲁。

这种方法的缺点是服务层正在运行甚至还不适用的验证(因为它不知道用户在过程中的位置)但是它有一个巨大的优势 - 可以移动字段在页面之间,页面重新排序,您命名,并且不必触及服务层。唯一需要改变的是控制器层中的错误与用于解决错误的页面之间的映射。

在对该向导进行重大更改的项目的多个版本之后,这个设计具有令人难以置信的弹性(抱歉,我为此感到自豪)。

我对你问题的其他部分没有任何建议,因为我从未在大范围内这样做,但我确定你知道,你只想让AJAX将字段值发送到服务器当场失去焦点(或根据控件进行点击)并更新模型时。如果我适合我的设计,我只执行域验证(例如,它可以解析为日期)并将其写入数据库而不通过服务层验证,然后只有当它们继续执行时才执行我运行我的服务层验证(此时他们可能会看到一个错误,例如“您输入的日期必须在今天之前”)。我有一个类似的要求 - 他们可以随时保存他们的工作,只要我可以将他们的数据写入数据库(我不能将“abc”存储到日期字段中),它会很好但是当他们重新加载他们的保存数据并尝试继续通过向导,业务逻辑验证将捕获任何错误。

相关问题