2014-11-13 2 views
0

есть ли какое-нибудь хорошее решение для проверки доменов после смены?Логика валидации логики

Например: В нашем случае мы получили пользователей как объект домена. UserGlobal имеет срок действия (activeFrom и activeTo). Когда администратор меняет этот таймфрейм, ему необходимо проверить сервальные другие домены, такие как временные рамки BankDataExpiration, временные рамки контракта и т. Д. ... Сегодня мы используем большой уродливый блок со всеми проверками в одном классе.

некоторые псевдо-код:

public class UsersService { 
    public void onUserChange(Users users) { 

     checkContracts(); 
     checkBankdata(); 
     // much other validation checks.... 
    } 
} 

После всей уродливой проверки вещи, возможно, что данные должны изменяться автоматически. Например, некоторые таймфреймы можно разрезать.

Но все это наносит ущерб «Принципу единой ответственности» и его нечитаемым и неподъемным. Есть ли хорошее и умное решение там, я еще не нашел?

Мы уже подумали о интерфейсе для проверки и проверки, который будет автоповещаться через весенние бобы. Но у нас возникли проблемы с управлением сеансами спящего режима. Мы изменили некоторые данные повторной передачи в сеансе с ошибкой, пользователь изменил данные и попытался ее повторить. Валидация проходит, и ранее измененные объекты будут выполнены.

Я надеюсь, что этот вопрос не вообще: S

+0

Вы можете создать интерфейс 'Validation' и создать несколько реализаций, перебрать их в свой метод' onUserChange'. Это позволило бы разделить вещи (возможно, повторно использовать некоторые валидации?) И, вероятно, быть более проверяемым. –

+0

Это очень упрямый вопрос - вы уже озвучиваете несколько себя, например, что это уродливое. Я считаю это вполне читаемым и, следовательно, не уродливым - он не только многократно используется повторно. Я могу сказать: «Переместите проверки к единственному многоразовому методу checkUser() в правильном классе бизнес-логики», и все остальные могут полностью не согласиться со мной; это потому, что только, на мой взгляд, это хорошая идея, я не говорю о твердых фактах. Я также не могу изложить твердые факты так, как задается вопрос. – Gimby

ответ

0

Вы можете создавать свои собственные валидатор. Выполните следующие действия:

  1. объявить собственную аннотацию, используя '@Constraint'

    @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME)
    @Constraint(validatedBy=BankDataExpirationValidator.class) public @interface BankDataExpiration {

  2. Реализовать логику проверки путем внедрения ConstraintValidator интерфейса например BankDataExpirationValidator

  3. Затем аннотировать Users класс с выше созданной аннотацией, @BankDataExpiration

Вы можете создавать различные виды валидаторов таким образом, и сопоставить его с вашими объектами домена.

Смежные вопросы