Trance (TRANslatable Content Entity) contains abstract and base classes for defining a content entity type in its own module.
The content entity types are bundled, revisionable and translatable.
This approach significantly reduces the lines of code required to define a new content entity type and reduces the amount of code duplication if more than one content entity type is defined.
An example module shows how to create a content entity type.