Groovy Delegation Pattern Using invokeMethod and propertyMissing methods

24 / Sep / 2012 by Imran Mir 0 comments

Following DRY is practised religously in my current project. Recently, I identified a case where code repetition had long been ignored. We used to pass either a domain object or a command object in the view model. Due to this, many domain methods had to be duplicated in the command object. This was probablematic because one would easily forget to create/modify a function in the command object if it was created/modified in the domain object. The code was smelling bad. The classes were something like this:

Class College{
//attributes

//somethods
}

Class CollegeCO{
College college

 //other attributes and constraints

 // repetitive College methods

}

Groovy intercepts all methods and property access via invokeMethod and get/SetProperty property hooks. So all I needed to do was to override invokeMethod() and propertyMissing() functions in the CommandObject like this:

def invokeMethod(String name, args) {
        college.invokeMethod(name, args)
    }

def propertyMissing(String name) {
        college."$name"
    }

So any missing method or property call on command object was automatically delegated to the college object. This is a simple way of utilising the Delegation Patttern using Groovy.

Hope this helps.

Imran Mir
Imran[at]intelligrape.com

FOUND THIS USEFUL? SHARE IT

Leave a comment -