Фреймворк для web-приложения - из каких частей он стостоит и что нужно знать/должно быть (напр. для PHP)

Предположим, что вы изучаете существующий и/или пишите свой фреймворк/CMS, рассмотрим ниже те составные части/свойства, которые должны быть (или которые вы должны знать, если речь о существующей системе):

  1. Общая модель работы с данными -- от извлечения из БД до вывода в виде html (например, если используется паттерн MVC, то вы должны понимать как можно описать модель, контроллер и представление и как именно можно передавать данные между этими сущностями)
  2. Из первого сразу же вытекает система маршрутизации -- т.е. по каким именно правилам (каких их определять?) текущему url на вашем сайте сопоставляется тот или иной ответственный за этот адрес скрипт.
  3. Авторизация пользователей -- минимальная возможность отличать известных пользователей от обычных "гостей".
  4. Управление правами пользователей -- возможность выдать разные роли, разным авторизованным пользователям (у "Админов" обычно максимальные права). Помимо выдачи прав должны быть какие-то средства проверять эти права, например, для ответа на вопрос "выводить ли данный блок страницы текущему пользователю или нет?".
  5. Система кеширования данных и сброса кеша разном уровне: объектов, блоков или целых страниц сайта, в ряде случаев может оказаться просто необходимой