Как уменьшить разрыв между бизнесом в бумаге и кодом
У меня есть бизнес-сценарий, как показано ниже.
Я добавляю строки возможных пар (ключ, значение) (Страна, Климат), как показано ниже.
На рисунке 2 представлен весь сценарий "Действительный" и "Недействительный" (ключ, значение).
Возможные ключи - Все страны, Индия, Австралия, Америка, Англия
Возможные значения - все климатические, жаркие, сухие, дождливые, холодные, влажные
Например
если в качестве первой пары выбрано (Вся страна, Весь климат), в качестве второй пары не следует выбирать (Англия, горячая)
Если в качестве первой пары выбрано (Вся страна, горячая), то в качестве второй пары не следует выбирать Индию (горячая)
Если (Америка, Весь Климат) выбрана в качестве первой пары (Америка, Горячая), не следует выбирать в качестве второй пары
в то время как
Если (Индия, горячая) выбрана в качестве первой пары (Индия, влажная), следует выбрать в качестве второй пары
Если (Америка, весь климат) выбрана в качестве первой пары (Англия, весь климат) будет выбрана в качестве второй пары
Если (Америка, весь климат) выбрана в качестве первой пары (Индия, влажная), то должна быть выбрана вторая пара
Изображение 1
Изображение 2
Вопрос
1. Есть ли лучший способ представить этот бизнес-сценарий на бумаге, кроме этого.
2. Какова была бы лучшая реализация переноса Матрицы из Бумаги в Код, чтобы бизнес в бумаге и коде был тесно связан.
Другими словами, на все сценарии можно просто ответить, используя в коде операторы If else. Но при этом способ, которым логика, интерпретируемая в статье, не имеет тесной связи в коде.
1 ответ
Один из способов сделать это с помощью справочной таблицы. Таблица может быть представлена таким образом, чтобы непрограммист мог легко понять и даже изменить содержимое таблицы. Например, на языке программирования C я бы объявил структуру и поместил некоторые определения в заголовочный файл, например так:
combo.h
#define ALL_COUNTRY 1
#define ONE_COUNTRY 0
#define ALL_CLIMATE 1
#define ONE_CLIMATE 0
#define YES 1
#define NO 0
typedef struct
{
int oldCountry;
int oldClimate;
int newCountry;
int newClimate;
int isValid;
}
stCombination;
extern stCombination combinations[];
Тогда таблица, которую могут увидеть непрограммисты, будет выглядеть так
combo.c
#include "combo.h"
stCombination combinations[] =
{
// 1st country 1st climate 2nd country 2nd climate valid?
{ ALL_COUNTRY, ALL_CLIMATE, ONE_COUNTRY, ONE_CLIMATE, NO },
{ ALL_COUNTRY, ALL_CLIMATE, ONE_COUNTRY, ALL_CLIMATE, NO },
{ ALL_COUNTRY, ALL_CLIMATE, ALL_COUNTRY, ONE_CLIMATE, NO },
{ ALL_COUNTRY, ALL_CLIMATE, ALL_COUNTRY, ALL_CLIMATE, NO },
{ ONE_COUNTRY, ONE_CLIMATE, ONE_COUNTRY, ONE_CLIMATE, YES },
{ ONE_COUNTRY, ONE_CLIMATE, ONE_COUNTRY, ALL_CLIMATE, YES },
{ ONE_COUNTRY, ONE_CLIMATE, ALL_COUNTRY, ONE_CLIMATE, YES },
{ ONE_COUNTRY, ONE_CLIMATE, ALL_COUNTRY, ALL_CLIMATE, NO },
{ ALL_COUNTRY, ONE_CLIMATE, ONE_COUNTRY, ONE_CLIMATE, YES },
{ ALL_COUNTRY, ONE_CLIMATE, ONE_COUNTRY, ALL_CLIMATE, NO },
{ ALL_COUNTRY, ONE_CLIMATE, ALL_COUNTRY, ONE_CLIMATE, YES },
{ ALL_COUNTRY, ONE_CLIMATE, ALL_COUNTRY, ALL_CLIMATE, NO },
{ ONE_COUNTRY, ALL_CLIMATE, ONE_COUNTRY, ONE_CLIMATE, YES },
{ ONE_COUNTRY, ALL_CLIMATE, ONE_COUNTRY, ALL_CLIMATE, YES },
{ ONE_COUNTRY, ALL_CLIMATE, ALL_COUNTRY, ONE_CLIMATE, NO },
{ ONE_COUNTRY, ALL_CLIMATE, ALL_COUNTRY, ALL_CLIMATE, NO },
};
Поиск в таблице можно выполнить с помощью линейного поиска или путем вычисления индекса на основе четырех битов информации.