[RSS]

Code Generation Architecture: A Proposal

Codegen is Everywhere

  • Entity from DB
  • JSF from Entity
  • REST from Entity
  • Java Desktop App from DB
  • UML
  • Visual Web "InSync" codegen
  • BPEL orchestration editor

Problem

  • No incremental changes
  • Loss of flexibility - hardcoded to a particular architecture/framework
  • Can't afford one-off support for all popular frameworks

Proposal

  • Take a look at how UML does it
    • Template-based (FreeMarker)
    • Supports incremental changes through unique identifiers in comments
    • Fine-grained control of what gets regenerated through directives
  • Advantages:
  • Templating allows flexible and multiple codegen from a single metadata definition (database, entities, pages, etc.)
  • Takes advantage of popular open source templating language
  • Uses standards-based scripting
  • Allows user to refine what they want generation to look like
  • Allows community to provide alternate codegen templates
  • Allows us to support multiple architecures/frameworks within a single codegen implementation

References

Challenges

  • Writing templates is a black art
    • UML team is looking at how to improve this, but not their first priority
  • This can mean major rewrites for some functionality
    • UML team was able to rewrite their codegen in 4 months

Proposed approach

  • Do it with one project first (smallest one, or least risky)
  • Refine, review, adjust, etc.
  • Expand to other projects over time