DSL for defining and using factories - less error-prone