Я работаю над новым проектом.
Моей лучшей аналогией был бы психолог-тестировщик.
Аспект №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 - это известный тип "True или False".
Номер 2 - это известный тип «Один ответ / множественный выбор», и конечный бизнес-пользователь создаст возможные ответы.
Число 3 - это известный тип "Integer". Конечный пользователь (лицо, проводящее оценку) может в основном ввести любое целое число.
Число 4 - это известный тип "десятичного числа". То же самое, что и Integer.
Аспект № 2.
Конечный бизнес-пользователь должен оценить ответы человека. И назначьте некоторое скалярное значение для набора ответов.
* +1025 * Пример:
Если кто-то ответил:
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 Business Rules Framework. Не подлежит оплате, но возможно.
Моя проблема с любым движком правил состоит в том, что «словарь» (имейте в виду, у меня ограниченный опыт работы с механизмами бизнес-правил) основан на объектах со статическими свойствами.
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 #