Add getModelClassName() and getModelClass() to BaseModel. Since all classes have that data anyways, just expose it as a friendly method.
For example, MBMessage.getModelClassName() -> com.liferay.portlet.messageboards.model.MBMessage
Added AuditedModel interface. Most of our base models have companyId, createDate / modifiedDate, userId / userName. If a model has those fields, then it will also implement the AuditedModel interface.
If a base model is an AuditedModel, and also has a groupId, then it is also a GroupedModel - meaning, its data can be "grouped" into sites / communities.