Alternative implementation choices
One time generation Instead of a maven archetype initial project creation could be done with Yeoman A webapp that produces a zip for download like Spring Initializr for Spring Boot A custom CLI possibly in python Metamodel Instead of a new metamodel Klass could use an existing metamodel like Eclipse Modeling Framework s ECore ECore is a fairly complete implementation of UML with all its warts ECore also has enhancements to allow it to represent anything expressible in Java including Generics Klass s metamodel is a fairly narrow subset of UML It addresses some weaknesses in UML such as the lack of a type hierarchy between the various types of properties Klass s metamodel also includes projections and services Metamodel language Instead of a new DSL the model could be expressed using OpenAPI vendor extensions maybe unproven A data format that s not a DSL like JSON YML or XML conforming to a JSON schema or XSD Annotations inside a Java or Python program A graphical language like UML Data Store Rather than a relational database the data could be stored in A specific non relational store like a documentation database or a graph database An abstract DataStore interface with multiple implementations Audit Data Rather than storing phased out data in the same tables as active data they could be stored in separate audit tables This would improve the performance of queries for active data It would complicate querying for previous versions especially when those versions have relationships to data that is still active Relationship criteria The docs show a syntax for relationship criteria that is similar to a sql join It s possible to use a syntax where a property is annotated as a foreign key instead It s possible to use a syntax where a foreign key tuple is listed instead However parameterized properties would need a more powerful syntax Service syntax The service syntax is url centric If we want to support both http and rpc we may want a more flexible syntax relationship this id Answer questionId