Реализация пользовательского шаблона правил

У меня есть список бизнес-правил, которые мне нужно применить к данным json, а затем вывести их обратно через http-сообщение.

Правила определяют, как форматировать строки в зависимости от их типа и значения. бывший:

  • имя. Первая буква должна быть заглавной.
  • отчество: если одна буква, добавьте '.' в конце

Сложность заключается в том, что я хочу иметь возможность добавлять/удалять бизнес-правила без изменения кода. Поэтому я подумал о сохранении правил и их определения в таблице sql.

Таблица выглядит так:

| RuleName | Action | |---------------------|------------------ | | padLeft | PadLeft<x> | |---------------------|------------------ |

Я не знаю, как перевести правила в действие, которое они должны предпринять. Я наткнулся на это что очень близко к тому, что я ищу. Может быть, я слишком усложняю это, поэтому я открыт для разных предложений


person user2708543    schedule 16.05.2018    source источник
comment
Те правила, которые вы описываете, требуют полноценного языка программирования или чего-то очень близкого к нему. Вы можете искать библиотеки оценщиков выражений .NET (FLEE, NCalc и т. д.), и если есть такая, которая сделает все, что вам нужно, сохраните выражения в БД в виде строк. Я бы не рекомендовал писать свой собственный для этого проекта (как проект сам по себе, я не могу ничего порекомендовать, по крайней мере, что касается программирования).   -  person 15ee8f99-57ff-4f92-890c-b56153    schedule 16.05.2018
comment
Когда вы говорите без изменения кода — вы имеете в виду без изменения какого-либо кода или без изменения других частей кода — например, вы хотите изолировать бизнес-правила в их собственных классах?   -  person Scott Hannen    schedule 16.05.2018
comment
Я бы, вероятно, использовал какое-то перечисление для правила «какое» и сохранил бы его в вашей БД. Затем вы можете отключить это и просто перебрать правила, применяемые к БД.   -  person Zexks Marquise    schedule 16.05.2018


Ответы (1)


Если вы хотите добавить новое поведение в свой код, не перестраивая его, вам не нужно изобретать велосипед, используйте плагины.

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

Я могу дать вам более подробную информацию, если это необходимо, но в Интернете полно информации о разработке плагинов C #. Использование БД для хранения поведения вместо данных звучит для меня как запах кода.

person Ignacio Soler Garcia    schedule 16.05.2018
comment
Я рассмотрю идею плагинов. Спасибо! - person user2708543; 17.05.2018
comment
Если вы думаете, что это решение, пожалуйста, примите ответ. - person Ignacio Soler Garcia; 17.05.2018