Элегантный способ чтения бизнес-правил, хранящихся в файле XML - PullRequest
2 голосов
/ 05 марта 2009

Мне нужно прочитать бизнес-правила, хранящиеся в файле XML (я использую VC ++ / MFC / MSXML). XML состоит из правил. Каждое правило имеет набор условий и действий. Каким будет элегантный дизайн ООП для такой системы? Какие шаблоны дизайна вы бы использовали, если бы вы были разработчиком такой системы?

Обновление:
Правила составляются последовательно и исполняются по одной покупке, если выполняются все условия правила.

пример xml:


   <rules>
      <!--  rule no. 1 -->
      <rule name="rule no. 1">
         <conditions>
            <condition name="condition no. 1" type="ATTR_EMPTY">
               <parameters>
                  <parameter name="attribute_name">ttt</parameter>
                  <parameter name="workflow_id">3</parameter>
                  <parameter name="workflow_state_id">5</parameter>
               </parameters>
            </condition>
            <condition name="condition no. 2" type="ATTR_EMPTY">
               <parameters>
                  <parameter name="attribute_name">ttt</parameter>
                  <parameter name="enviroment_id">3</parameter>
               </parameters>
            </condition>
         </conditions>
         <actions>
            <action name="action no. 1" type="ATTR_CLEAR">
               <parameters>
                  <parameter name="attribute_name">ttt</parameter>
               </parameters>
            </action>
         </actions>
      </rule>
   </rules>

Ответы [ 7 ]

1 голос
/ 19 апреля 2009

Также ознакомьтесь с ПравиламиML ...

1 голос
/ 05 марта 2009

Часть правил немного похожа на Schematron:

http://www.schematron.com/elements.html

, который является языком проверки XML, написанным на XML и стандартом ISO.

Предполагая, что исходные данные (которые проверяются) также находятся в XML, один из подходов состоит в том, чтобы преобразовать ваш набор правил в Schematron (что не сложно в XSLT), а затем использовать «инфраструктуру» Schematron (т. Е. таблицы стилей) для проверки вашего контента по файлу Schematron.

Это приведет к получению файла XML результата, показывающего, какое правило было выполнено, а какое нет; Затем вы можете выполнять «действия» (преобразования?), связанные с каждым проверенным правилом.

1 голос
/ 05 марта 2009

Я бы рассмотрел два варианта, один - это оценщик по одному выстрелу (ваше приложение запускается один раз с набором правил в сравнении с данными, а затем завершается), в этом случае я бы использовал XML SAX парсер с обратными вызовами, которые обрабатывают данные

Другой - это анализатор DOM, который кэширует правила в памяти, используя класс правил, который является составной частью класса Condition (Check) и класса Action.

1 голос
/ 05 марта 2009

Трудно сказать по такому краткому описанию, но я бы сделал каждое правило объектом, который управляет своими условиями и действиями. Правила будут создаваться фабрикой из XML и храниться в каком-то словаре.

1 голос
/ 05 марта 2009

Как вы собираетесь моделировать эти правила в памяти?

Одним из способов представления этих правил в памяти является использование языка программирования более высокого уровня (например, python). Преобразуйте ваши XML-правила в код Python с эквивалентным потоком управления, который вызывает ваши объекты C ++ при его выполнении. Я фактически делал это в прошлом, чтобы внедрить систему правил. Я использовал JavaScript как в качестве формата сериализации правил (гораздо легче определять правила в JS, чем в XML, и гораздо более читабельный), так и в качестве фактического исполняемого кода (я использовал SpiderMonkey для выполнения C ++ <-> JS). Но вы можете сделать это в основном на любом популярном языке сценариев, который имеет привязку C ++.

1 голос
/ 05 марта 2009

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

Edit:

Окей, даунвот, так что это не тот ответ, который вы искали.

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

0 голосов
/ 22 января 2010

Написание бизнес-правил на XML неуклюже. Кроме того, C ++ также не является хорошим языком для обработки XML.

Ваше приложение может предоставлять свои свойства с помощью активных сценариев и писать правила в VBScript / JScript. Таким образом, вы можете оценивать правила во время выполнения.

Если для определения правил требуется XML, я бы написал процессор отдельно на языке высокого уровня, таком как Java, JavaScript или XSLT. Запустите процессор в фоновом режиме и получите возвращаемое значение в вашем приложении C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...