Часть 1. Написание собственного фреймворка

Структура фреймворка