I don't understand how a `DomainObject` differs from a `Definition` or a `Type` or a `PrimitiveType`. There must be cleaner class hierarchy or more explicit naming convention

It seems like you have the exact same hierarchy as the front end but are too scared to use the same class names (because `TypeTypeValue` looks scary?)

 - `DomainObject` -> `Value`
 - `Definition` -> `TypeValue`
 - `Type` -> `TypeValue`
 - `PrimitiveType` -> `TypeValue`

(I'm sure there's a reason why I'm wrong here)