Groovy 2.4.4 объекты команды - повторное использование закрытия валидатора

Допустим, у меня есть следующая команда:

@Validateable
class MyCommand {
    String cancel_url
    String redirect_url
    String success_url

    static constraints = {
        cancel_url nullable: false, validator: { url, obj ->
            //some specific validation
            //some common url validation
        }
        redirect_url nullable: false, validator: { url, obj ->
            //some specific validation
            //some common url validation
        }
        success_url nullable: false, validator: { url, obj ->
            //some specific validation
            //some common url validation
        }
    }
}

Допустим, у меня есть общая проверка, которую я хочу выполнить для любого поля URL (например, проверка того, что домен разрешен). Каков синтаксис, чтобы разбить этот общий код проверки на отдельную функцию вместо того, чтобы помещать один и тот же блок в каждое закрытие проверки?

1 ответ

Решение

Вы пытались унаследовать (или, скажем, реализовать) вашу команду от нескольких признаков?

Trait CancelComponentCommand {
    String cancelUrl

    static constraints = {
        cancelUrl validator: { url, obj ->
            //some specific validation
            //some common url validation
        }
    }
}

Trait RedirectComponenCommand {
    String redirectUrl

    static constraints = {
            redirectUrl validator: { url, obj ->
            //some specific validation
            //some common url validation
        }
    }
}

@Validateable
class MyCommand implements CancelComponentCommand, RedirectComponenCommand {

}

PS Нет необходимости устанавливать nullable: falseпо умолчанию это ложь. Кроме того, код гораздо более читабелен, если поля написаны с использованием camelCase.

Другие вопросы по тегам