Как организовать архитектуру для конвейера формул?

Пишу на php некоторое приложение, которое для фирмы делает некоторый расчет. Какие имеет сущности - фирма, у нее множество параметров (param1, param2, ..., paramN), есть несколько методик подсчета определенного уровня доверия, каждая методика включает коэффициенты, расчитываемые по формулам и таблица соответствия для каждой формулы.

Например: Рога и копыта

  1. На рынке: 5 лет
  2. Сфера: Промышленность
  3. Бух. отчет парам. 1: 150 000 (условные параметры)
  4. Бух. отчет парам. 2 2: 300 000

Методика 1. Основная

  1. Коэф - Бух. отчет парам. 2 / Бух. отчет парам. 1 = 2
  2. Таблица соответствия для коэф. 1:

Если сфера промышленность, то при

коэф.1 > 2 = 5 баллов

коэф.1 = 2 = 3 балла

коэф.1 < 2 = 1 балл.

Для иных сфера свои коэф., но мы их не рассматриваем в примере.

Один из важных аспектов - методик подсчета уровня доверия фирме может быть сколько угодно, у каждого свои коэффициенты и методики расчета, но на выходе мы всегда имеет некоторый суммарный балл, который нам и нужен.

Теперь к сути - почему-то мне видится, что обоснованным было бы применить ОО-модель с примерно следующей логикой организации:

Методика 1 - класс, имеющий массив коэффициентов. Сами коэффициенты - тоже классы, внутри которых есть метод handler, запускающий расчет по формулам. Формулы - тоже в отдельные классы. Таблицы соответствия - тоже отдельные классы

И матрешкой одно в другое вкладывать. Таким образом получится набор методик, внутри которых есть ряд коэффициентов, высчитываемых через формулы и таблицы соответствия этих формул набору значений.

Тут 2 ключевых вопроса и 1 общий.

1) Если делать так, как я сказал, как загружать, например, формулы в класс коэффициента? Какой придумать загрузчик в такой ситуации?

2) Как передавать формулам данные? Не в базу же данных каждая лезть будет, запросов будет тьма. Была мысль насчет формирования некоторого объекта-источника данных, как смотрите на это?

3) Не слишком заморочено? Просто хотелось бы иметь четкую стройную структуру, а не кучу друг на друге налепленных алгоритмов.

Или может предложите другую схему?


Ответы (1 шт):

Автор решения: Андрей Туманов

Насколько я понял из условий задачи, структура классов может быть такой:

  1. Расчетный класс в который загружается коллекция фирм и который содержит коллекцию классов методик расчета. Также этот класс реализует основной алгоритм расчета по фирмам и хранит(выводит) результаты расчета.

  2. Базовый класс фирмы с наследниками, которые каждый содержит свои параметры по фирме и разные данные.

  3. Базовый класс методики расчета с наследниками, которые каждый реализуют свой алгоритм расчета по нужным коэффициентам. Где и как хранить коэффициенты решает каждый наследник по своему. Также, наследник реализует нужные формулы, которые могут быть вынесены в отдельные классы, если они используются в разных наследниках.

Расчет будет состоять в наполнении класса 1 данными по фирмам 2 и запуска расчета. Для каждой фирмы создается нужный экземпляр класса 3 который производит расчет.

→ Ссылка