我正在做一个新项目。我最好的比喻是心理评估测试制造商。
方面#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#