Модели предпочитаю делить на доменные(то, что мапится к БД) и модели представления(то, что нужно отдать клиенту). Реляционная модель данных в большинстве случаев не кореллирует с моделью представления(в вашем случае, например, списки категорий и пр.)
Наследование же представления от домена, на мой взгляд, абсолютно имеет место быть для систем без сложной бизнес-логики (там, где просто CRUD - можно вообще без моделей представления обойтись); в ином случае можно закончить тем, что будет несколько уровней наследования в погоне за требуемым классом. И каждое изменение такого класса(особенно, если он родительский) может стать головной болью.
Обычно, использую такую декомпозицию слоев приложения:
View -> Controller <-Service <- Repository <- Database
Уровень Repository оперирует доменом, уровень Service оперирует как доменом, так и представлением, уровень Controller - только представлением. Соответсвенно, в уровне сервисов и производится преобразование домена в представление.