Как уменьшить разрыв между бизнесом в бумаге и кодом

У меня есть бизнес-сценарий, как показано ниже.

Я добавляю строки возможных пар (ключ, значение) (Страна, Климат), как показано ниже.

На рисунке 2 представлен весь сценарий "Действительный" и "Недействительный" (ключ, значение).


Возможные ключи - Все страны, Индия, Австралия, Америка, Англия

Возможные значения - все климатические, жаркие, сухие, дождливые, холодные, влажные


Например

если в качестве первой пары выбрано (Вся страна, Весь климат), в качестве второй пары не следует выбирать (Англия, горячая)

Если в качестве первой пары выбрано (Вся страна, горячая), то в качестве второй пары не следует выбирать Индию (горячая)

Если (Америка, Весь Климат) выбрана в качестве первой пары (Америка, Горячая), не следует выбирать в качестве второй пары

в то время как

Если (Индия, горячая) выбрана в качестве первой пары (Индия, влажная), следует выбрать в качестве второй пары

Если (Америка, весь климат) выбрана в качестве первой пары (Англия, весь климат) будет выбрана в качестве второй пары

Если (Америка, весь климат) выбрана в качестве первой пары (Индия, влажная), то должна быть выбрана вторая пара

Изображение 1

Изображение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  },
};

Поиск в таблице можно выполнить с помощью линейного поиска или путем вычисления индекса на основе четырех битов информации.

Другие вопросы по тегам