Две причины, по которым я обычно вижу наследование ОО, характерное для систем CMS, связаны с постоянством и представлением иерархии.
Постоянство вступает в игру, если вы имеете дело с системой, которая имеет свой собственный тип ORM. Таким образом, вы можете легко CRUD и запрашивать объекты без необходимости новых таблиц. Это также упрощает возможность определения отношений между различными типами сущностей, так что класс папок может иметь метод getContents, который возвращает, скажем, массив других сущностей.
Иерархия вступает в игру с базовым типом, который требует указания родительского объекта. Большинство систем CMS в значительной степени полагаются на представление контента каким-либо родительским дочерним способом или непосредственное моделирование структуры папок. Таким образом, этот тип качества в базовом классе обеспечивает соблюдение.
Что касается интерфейсов, то это зависит от того, какой язык вы используете. Если у вас слабо типизированная система, то, пока ваши объекты реализуют правильные методы, вам не нужно реализовывать интерфейс. Если вы на самом деле расширяете конкретный верхний уровень, вы, вероятно, найдете копание его внутренних алгоритмов для вышеупомянутой персистентности и анализ их иерархии.