Допустим, у нас есть набор пользовательских формул, которые зависят от других формул, которые выглядят примерно так (это может быть любой синтаксис).
Example: Give a Customer with multiple accounts
ExampleOne: Accounts.Sum() - ExampleTwo
ExampleTwo: Accounts.CurrentAssets - 200 / CurrentYear
...etc
Я хочу разработать службу, которая предоставляет клиенту счета, оценить эти формулы и вернуть результат для каждого элемента формулы:
ExampleOne: 123
ExampleTwo: 999
...etc
Каков наилучший подход к этому учитывая следующие требования в среде c#. net. Обратите внимание, что синтаксис здесь не важен):
- Эти формулы часто меняются не техническими специалистами
- Существуют сотни этих формул, которые имеют зависимости от каждого другое (Acycli c)
- Эти формулы необходимо сохранить в базе данных
- Вычисления, выполняемые для оценки этих формул, должны быть быстрыми
Я пытаюсь оценить несколько параметров:
База данных графиков
Анализ формул в виде абстрактного синтаксического дерева и сохранение их в базе данных графов. Однако при таком подходе трудно обновить формулы после создания.
Оценивать формулы как время выполнения
Я мог бы написать синтаксический анализатор, который будет принимать формулу и оценивать ее во время выполнения.
Rules Engine
Я видел этот аналогичный вопрос . Но я не уверен, что это правильный подход для этого.
Реляционная база данных
Как бы я смоделировал формулы в базе данных с возможностью их простого изменения?