Хранить бизнес-правила в XML-документе, потом проверять на Java, как? - PullRequest
0 голосов
/ 10 мая 2010

Пример документа XML Rules:

<user>
  <username>
     <not-null/>
     <capitals value="false"/>
     <max-length value="15"/>
  </username>
  <email>
     <not-null/>
     <isEmail/>
     <max-length value="40"/>
  </email>
</user>

Как мне это реализовать? Я начинаю с нуля. Сейчас у меня есть класс User и UserController, который сохраняет объект User в de DB (через слой Service и Dao-layer), базовый Spring MVC. Я не могу использовать Spring MVC Validation, однако в наших модельных классах мне нужно использовать XML-документ, чтобы администратор мог изменить правила

Мне кажется, мне нужен шаблон, который динамически создает алгоритм на основе того, что предусмотрено документом XML Rules, но я не могу думать ни о чем, кроме огромного количества операторов if.

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

Ответы [ 2 ]

1 голос
/ 10 мая 2010

Это колесо много раз переизобреталось!

Вы, вероятно, можете использовать проверку Spring MVC путем реализации интерфейса Spring * Validator , но вам может потребоваться реализовать или найти способ обосновать проверку на правилах, загруженных другими средствами. 1007 *

Я гуглил и обнаружил множество страниц, описывающих, как использовать проверку общих в Spring. В качестве бонуса некоторые описывают использование valang. Если ваш администратор может изменить правила проверки до развертывания, одного из них вполне может быть достаточно.

Если вы действительно хотите создать собственные бизнес-правила XML, вы можете проанализировать правила, используя Apache Digester . Возможно, вы захотите загрузить правила в структуру данных, используемую вашей собственной реализацией интерфейса Spring Validator.

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

0 голосов
/ 10 мая 2010

Может быть, пример будет:

  //PSEUDOCODE
  abstract class Validator {
    Map<String method, Set<Field> fields> validationMap;
    Map<String fieldName, Set<String> errorMessages> validationErrors;

 void parseXML() {
     validationMap.add("notNull", { " 'username', 'JavaPete' ", " 'email', 'pete@java.com' " }
     validationMap.add("max-length", { " 'username', 'JavaPete', '15' ", ... }
  }

 void validate() {
      for (String method : validationMap.keys) {
           for (Field field : validationMap.get(method) ) {
                 invoke(method, field);
           }
      }
  }

 void notNull(Field field) {
     if (field.getValue() == "") {
          validationErrors.add(field.getFieldName(), "Can't be null!");
     }
  }

Обратите внимание, что я не добавлял каждое свойство Set <> в Карты правильно, но здесь просто стоит подчеркнуть.

Будет ли это правильным решением? надежный?

...