Разработка шаблона для автоматически вычисляемых полей и введенных пользователем значений

1

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

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

Есть шаблон дизайна, который может мне помочь.

Уже существуют классы POJO домена. Пожалуйста, дайте мне знать, если вопрос слишком абстрактный.

  • 0
    Для такого поля я бы добавил дополнительное поле флага is_auto (по умолчанию true). При вызове пользователем setField () is_auto устанавливается в false. Is_auto может использоваться в триггере или в классе POJO.
  • 0
    @StanislavL Да, я тоже об этом думал, но не подумал ли ты, что это слишком много? кроме того, мне придется пройти через сотни доменных POJO, чтобы внести это изменение.
Показать ещё 2 комментария
Теги:
spring
hibernate
design-patterns
java-ee

2 ответа

1

Нам нужен способ отличить, было ли поле закрыто пользователем. Простой флаг на уровне лица может помочь;

class MyEntity {
  Integer userValue;
  boolean isOverridden ;

  public Integer getValue() {
     return if(isOverridden)? userValue: calculate();
  }
}

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

Class MyEntityValue{
   String name;
   boolean isOveridden;
}
1

Хорошо, просто идея

http://randomthoughtsonjavaprogramming.blogspot.com/2013/07/formula.html

Вы можете определить 2 поля в POJO class one для значений пользователей и один рассчитанный (используя аннотацию @Formula). Если значение пользователя равно null, вы можете использовать вычисленное значение.

class MyEntity {
  @Column(name="the_value")
  Integer userValue;

  @Formula("(select ...)")
  Integer calculatedValue;

  public Integer getRealValue() {
     return userValue==null ? calculatedValue : userValue;
  }
}

Таким образом, когда реальное значение задается пользователем, вычисленное значение игнорируется. Но вычисляемое значение оценивается в любом случае.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню