Grails WebFlow DRY Логика ветвления - PullRequest
4 голосов
/ 19 января 2011

Grails WebFlow noob здесь ...

Одно состояние в моем WebFlow получает два события, которые должны инициировать одно и то же действие, а затем переходить в отдельные состояния, если это действие успешно. Моя первоначальная попытка повторила код в actionState. Нехорошо. Итак, после некоторых проб и ошибок я пришел к следующему.

    state0 {
        on("event1") {
             flash.stateAfterNext = "state1"
        }.to "actionState"

        on("event2") {
            flash.stateAfterNext = "state2"
        }.to "actionState"
    }

    actionState {
        action {
            flow.unit = Unit.get(params.unit)
            success()
        }
        on("success").to { flash.stateAfterNext }
        on(Exception).to "home"
    }

    state1 { ... }

    state2 { ... }

Это работает, но это хорошая практика Грааля? Есть ли лучший способ для обработки логики ветвления потока, как это? В частности, должен ли я здесь использовать подпоток, и если да, то как бы это выглядело?

Примечание. Я попытался переместить код в actionState в отдельный метод, но поскольку он ссылается на flow, который не работает.

1 Ответ

2 голосов
/ 20 января 2011

Как насчет чего-то вроде

flow{    
    state0 {
        on("event1") {
            saveUnit(flow,params.unit)
        }.to "state1"    
        on("event2") {
            saveUnit(flow,params.unit)
        }.to "state2"
    }
    state1{...}
    state2{...}

}

private saveUnit(flow, unit){
    flow.unit = Unit.get(unit)
}
...