4

我正在做一个新项目。我最好的比喻是心理评估测试制造商。

方面#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 是一种已知类型的“十进制”。与整数相同。

方面#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 Sql Server 2008 后端数据库 VS2010 Pro, C#

4

3 回答 3

1

确保您正在为适合分层对象的数据库建模这篇文章会有所帮助

为测试创建表 为问题创建表,包括 question、testid、questiontype 列为答案、答案 ID、问题 ID、答案和 istrue 列创建表 答案属于问题 一个问题可以有多个答案

为用户或员工创建表为用户答案、答案 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
}

获取作为数据字典的输出并在此处发布。如果没有数据架构,您获得的帮助将受到限制。

于 2011-11-15T20:59:10.483 回答
1

您确定要针对此问题使用业务规则引擎吗?

据我了解,BRE 的用例是

  • 主要是静态执行流程
  • 有些决定确实经常改变

在您的用例中,整个系统(Q/A 流和评估)是动态的,因此恕我直言,整个系统的简单领域特定语言将是一个更好的解决方案。


您可能想从testMaker中获得一些灵感- 一个完全用于此工作流程的基于 Web 的软件。(免责声明:我为这个项目做出了一些贡献。)它的评分规则非常基本,所以这可能对你没有太大帮助。它旨在将数据导出到 SPSS 并从那里构建报告......

于 2011-11-15T14:33:17.870 回答
1

如果它是一个小型应用程序,即 10 个用户而不是 1000 个用户,并且它不是业务关键,那么我会推荐 Excel。

优点是,大多数商业用户都非常熟悉 excel,并且很可能在他们的机器上安装了它。基本上,您将 Excel 工作簿发送给您的业务用户。他们会输入问题、类型(十进制、真假等)。单击触发 excel 宏的按钮。这可以生成 XML 配置文件或将问题放入 SQL 中。您的应用程序只是像往常一样读取、显示并收集响应。

Excel 的主要优势在于 Aspect #2,即动态用户选择的业务规则。在同一 Excel 文档的另一张表中,最终业务用户可以根据自己的喜好指定尽可能多的响应/问题排列。Excel 用户非常熟悉输入简单的公式,例如 =If(A1 > 20 && A2 <50) 等。用户再次按下按钮并生成配置文件或将数据输入 SQL 服务器。

在您的应用程序中,您遍历规则表并将其应用于响应。

考虑到用户/调查的数量等。这个简单的解决方案将比 biztalk 或完整的海关规则引擎简单得多。如果您需要与多个系统对话、集成它们的数据、执行规则、创建工作流等,Biztalk 会很好。大多数其他规则引擎也适用于非常大、复杂的规则系统。这个规则系统的复杂性不仅仅是规则或排列的数量,它主要是必须与多个系统交谈或“结束约会”某些规则或为未来的开始日期制定规则等。

在您的情况下,网页系统上基于 Excel 或类似的数据网格可以正常工作。当然,除非您正在为 Gartner 或其他一些全球数据调查公司或主要政府统计机构做项目。在这种情况下,我建议使用 Biztalk 或其他商业规则引擎。

在您的情况下,它的 SQL 表包含问题、答案类型、要应用的规则。通过 Excel 或通过数据网格的“Web 中的 Excel”使输入变得用户友好,然后只需遍历规则并将它们应用于响应表。

于 2011-11-13T14:08:42.853 回答