我在做一个新项目。我最好的类比就是一个心理评估测试员。
方面#1.终端业务用户需要创建测试问题.有问题类型。以及在适用的情况下对这些问题的可能答复。
示例:
1. Do you have red hair? (T/F)
2. What is your favorite color? (Single Response/Multiple Choice)
(Possible Responses: Red, Yellow, Black, White)
3. What size shoe do you wear (rounded to next highest size)? (Integer)
4. How much money do you have on you right now? (Dollar Amount (decimal))因此,我需要能够创造问题,他们的问题类型,和一些问题,可能的答案。
在此:
数字1是一种已知类型的“真假”。
数字2是一种已知类型的“单一响应/多重选择”,最终业务用户将创建可能的响应。
数字3是一种已知类型的“整数”。最终用户(接受评估的人)基本上可以输入任何整数值。
数字4是一种已知类型的“十进制”。和Integer一样。
方面#2.最终业务用户需要评估个人的反应.并为一组响应分配一些标量值。
示例:
如果有人答复:
1. T
2. Red
3. >=8
4. (Not considered for this situation)一些精神病专家指出,如果有人给出了上述回答,你患抑郁症的风险比正常人高出85%。(其中85%是一个数字,最终商业用户(精神病学家)可以作为参数输入。
因此,方面#2是运行某人的反应,并确定一个结果。
必须设置“响应网格”,以便以优先级顺序(部分或全部)通过(部分或全部)可能性,然后在满足所有条件后(在一行上),退出结果。
如下所示:
(1.) T (2.) Red (3.) >=8 ... Result = 85%
(1.) T (2.) Yellow (3.) >=8 ... Result = 70%
(1.) F (2.) Red (3.) >=8 ... Result = 50%
(1.) F (2.) Yellow (3.) >=8 ... Result = 40%找到匹配后,使用百分比退出。如果你找不到匹配的,你就去看下一个规则。
此外,使用这个心理评估模拟示例运行,我不需要定义每个置换。许多关于心理评估的问题实际上并没有被使用,它们只是“绒毛”而已。所以在我上面的网格中,我故意忽略了问题#4,它与结果没有任何关系。
也可能有一个“这个人认真对待这件事吗?”评价网格:
(3.) >=20 (4.) >=$1,000 ... Result = False(鞋子尺寸的>= 20和口袋里有大把的钱的可能性很小,因此你可能没有认真对待心理测试。)
如果没有找到任何规则,(在我的实际应用程序中,不是这个模拟),我会抛出一个异常,或者根本不在乎。我不需要违约或失败规则。在上面,红色和黄色是“令人担忧”的最喜欢的颜色。如果你最喜欢的颜色是黑色或白色,这与你抑郁的危险因素没有关系。
我以前使用过业务规则引擎。(例如InRule)。它们很贵,而且没有在预算中。
BizTalk业务规则框架是一种可能。不是美元,而是可能的。
我对任何规则引擎的问题是,“词汇表”(我对业务规则引擎的经验有限,请注意)是以对象为基础的,具有静态属性。
public class Employee
{
public string LastName
{ get; set; }
public DateTime HireDate
{ get; set; }
public decimal AnnualSalary
{ get; set; }
public void AdjustSalary(int percentage)
{
this.AdjustSalary= this.AdjustSalary + (this.AdjustSalary * percentage);
}
}这将很容易创建业务规则。
If
the (Employee's HireDate) is before (10 years ago)
then
(Increase Their Salary) By (5) Percent.)
else
(Increase Their Salary) By (3) Percent.)但在我的情况下,测试是由(动态)问题和(动态)响应组成的,而不是预先确定的属性。
所以我想我是在寻找一些想法来研究如何做到这一点。
我知道我可以相当快地构建一个"TestMaker“应用程序。
最大的问题是将问题和(可能的答复)纳入“评估规则”。
谢谢你的建议。
技术: DotNet 4.0 Framework 2008后端数据库VS2010 Pro,C#
发布于 2011-11-13 14:08:42
如果它是一个小型应用程序,即10 s的用户,而不是1000 s,而它并不是业务上的关键,那么我推荐Excel。
优点是,大多数业务用户都非常熟悉excel,并且很可能在他们的机器上拥有excel。基本上,您可以将Excel工作簿发送给业务用户。他们会输入问题,类型(十进制,真假等)。单击触发excel宏的按钮。这可以生成XML配置文件或将问题放入SQL中。您的应用程序只是像往常一样读取、显示和收集响应。
Excel的主要优势在于第二方面,动态用户选择业务规则。在同一Excel文档的另一张表中,最终业务用户可以根据自己的意愿指定尽可能多的回答/问题排列。Excel用户非常熟悉输入诸如=If(A1 > 20 && A2 <50)等简单公式。同样,用户按下按钮生成配置文件或将数据输入到server。
在应用程序中,您将遍历Rules表并将其应用于响应。
考虑到用户/调查等的数量,这个简单的解决方案比biztalk或完整的海关规则引擎要简单得多。如果您需要与多个系统对话,集成它们的数据,执行规则,创建工作流等,Biztalk就更好了。大多数其他规则引擎也面向真正庞大、复杂的规则系统。这个规则系统的复杂性不仅仅是规则或排列的数量,它主要是要与多个系统交谈,或者“结束约会”某些规则,或者为未来的开始日期设置规则等等。
在您的例子中,基于Excel的或类似的网页系统上的数据将工作良好。当然,除非你在为Gartner或其他全球数据调查公司或主要的政府统计机构做项目。在这种情况下,我建议Biztalk或其他商业规则引擎。
在您的示例中,它的SQL表包含问题、答案类型、要应用的规则。输入通过Excel或"Excel in the web“通过一个数据集使用户友好,然后遍历规则并将它们应用到响应表中。
发布于 2011-11-15 14:33:17
您确定要使用业务规则引擎解决此问题吗?
据我所知,BRE的用法是
在您的使用中,整个系统(Q/A流和评估)是动态的,因此IMHO --一个简单的特定于整个系统的领域语言将是一个更好的解决方案。
您可能需要从testMaker获得一些灵感--这是一种基于web的软件,正是用于此工作流的。(免责声明:我对这个项目有一点贡献。)它的评分规则是相当基本的,所以这可能对你没有多大帮助。它的目的是将数据导出到SPSS,并从那里生成报告.
发布于 2011-11-15 20:59:10
确保您正在建模一个适合于分层对象这篇文章会有帮助的数据库。
为测试创建表-为问题创建表,用列
为用户或员工创建用于用户答案的表,回答id,选择答案
求值(对布尔-整数覆盖使用对象变量,在使用函数进行高异常覆盖之前使用try catch ):
function(questiontype,answer,useranswer)
switch(questiontype) //condition can be truefalse, biggerthan,smallerthan, equals
{
case: "biggerthan": if(useranswer>answer) return true else return false;
case "truefalse": if(useranswer==answer) return true else return false
case "equals": if(useranswer==answer) return true else return false
}请以数据字典的形式输出,并在此张贴。如果没有数据架构,您得到的帮助将是有限的。
https://stackoverflow.com/questions/8001070
复制相似问题