作为向导过程的一个步骤,我需要收集32个问题的答案,这些问题几乎不会改变(可能每两年一次)。每个问题都可以回答是或否,然后是肯定的问题需要解释。
天真的方法是具有Question1Response,Question1Explanation,Question2Response,Question2Explanation的模型属性......但是这使得从viewmodel映射到模型并且背痛。验证还需要32个ifs。但是,视图非常简单 - 只需要很多Html.RadioButtonFor和Html.TextBoxFor。此外,这与此数据的接收者(具有每个问题和响应的参数的Web服务)保持一致。
我倾向于将回复表示为具有问题编号,回复和解释的QuestionResponse对象的IList。这意味着从viewmodel到model和back的映射很简单,验证也很简单。这个视图有点难看 - 我最终编写了一个类似于Question.Single(q => q.QuestionNumber.equals(" 1"))的方法,但它变得更短了,因为它& #39;现在是一个循环。但是,我必须将调查问题存储在模型中,并且应用程序不使用数据库,但我可以在构造函数中构建它们...
此外,问题编号不仅仅是一个线性的进展,其中一些将是" 7b",因此对于验证,我需要存储所有问题的列表应该在那里。
我该如何构建这个模型?