Общая функциональность - это вызов нового класса, не обязательно общего предка.В формулировке вопроса отсутствует заявление об ответственности.Излишне говорить, что мы несем ответственность за создание нового класса.Я принимаю дальнейшие решения, основываясь на ответственности класса.
Я предпочитаю гибрид robbbert и Джаред : я создаю дополнительные классы, передавая им необходимый контроллервнутренние органы как параметры.Иногда классы развиваются из объектов метода .Например:
def action = {
def doer = SomeResponsibilityDoer(this.request, this.response)
render doer.action()
}
Не так коротко, но позволяет получить тестируемый код и поддерживать низкий уровень связи.
Поскольку SomeResponsibilityDoer
будет иметь только несколько полей - запросить ответ -нет ничего сложного в том, чтобы создавать его с каждым запросом.
Это не так уж важно, если SomeResponsibilityDoer
не перезагружаться при смене контроллера в dev, потому что:
- Первоначально вы можетеобъявите его в некоторых файлах контроллера - он будет перезагружен.После того, как вы завершите его, надеюсь, он не будет часто меняться, поэтому переместите его на
src/groovy
. - Еще важнее, что дизайн быстрее разрабатывается в модульных тестах, чем при запуске приложения и перезагрузке Contoller..