Grails adds a Hibernate criteria builder DSL so we can create criteria's using a builder syntax. When we have criteria with a lot of restrictions or conditional code inside the builder we can refactor this easily. We look at a simple criteria to show this principle, but it can be applied to more complex criteria's.
// Original criteria builder. def list = Domain.withCriteria { ilike 'title', 'Groovy%' le 'postedDate', new Date() } // Refactor def list2 = Domain.withCriteria { title delegate, 'Groovy%' alreadyPosted delegate } private void title(builder, String query) { builder.ilike 'title', query } private void alreadyPosted(builder) { builder.le 'postedDate', new Date() }