Вы можете использовать шаблон проектирования Делегирование :
class Swimmer {
def swim() { "swimming" }
}
class Runner {
def run() { "running" }
}
class Biker {
def bike() { "biking" }
}
class Triathlete {
@Delegate Swimmer swimmer
@Delegate Runner runner
@Delegate Biker biker
}
def triathlete = new Triathlete(
swimmer: new Swimmer(),
runner: new Runner(),
biker: new Biker()
)
triathlete.swim()
triathlete.run()
triathlete.bike()
В случае контроллера назначьте класс помощника непосредственно в поле экземпляра (или в нулевом конструкторе):
class HelperClass {
def renderFoo() { render 'foo' }
}
class FooController {
private @Delegate HelperClass helperClass = new HelperClass()
def index = { this.renderFoo() }
}
Информация о типе делегата компилируется в содержащий класс.
Вы можете использовать request.getSession (), чтобы получить компонентный объект.
Вы можете узнать больше о компонентном объекте в http://twistedmatrix.com/documents/current /api/twisted.python.components.Componentized.html - основной способ его использования заключается в определении интерфейса и реализации и отправке ваших on-объектов в сеанс.
Вызов getSession () создаст сеанс и добавит файл cookie для запроса:
Если у клиентов уже есть cookie сеанса, вызов getSession () прочитает его и вернет сеанс с исходным содержимым сеанса. Таким образом, для вашего кода прозрачно, создает ли он на самом деле файл cookie сеанса или просто читает его.
Файлы cookie сеанса имеют определенные свойства ... если вы хотите получить больший контроль над содержимым файла cookie, посмотрите Request.addCookie (), который getSession () вызывает за кадром.