MyCMS / Попытки / Теория создания CMS / 1. Составные части Framework-систем
Составные части Framework-систем.
Раз уж теперь нам известно, что CMS делается из FrameWork-а, то теперь пора узнать, что FrameWork, является набором объектов с методами, которым я и посвящу первую часть моего цикла статей.
Итак, раз у нас система, то само слово система подразумевает «целое, составленное из частей», в нашем случае частями могут являться программы, функциональные блоки, объекты, БД и т.п., а следовательно система будет требовать неких действий при начале работы, в которых описано как же со всем этим работать, то есть нам нужна функция инициализации, которой мы назначим конструктор. По окончании работы системы, так же может понадобиться помимо вывода каких-либо данных, зафиксировать изменения текущих переменных, для этих целей мы создадим деструктор.
Как Вы, наверное, уже заметили, речь идет о вещах, которыми характеризуются классы. И это не с проста, потому как я, не смотря на многочисленные заверения того, что класс это медленно и в PHP лучше не использовать, категорически против того, чтобы писать без классов. Объектно-ориентированное программирование (ООП), не смотря на множество приверженцев и противников, является для меня наиболее близким, потому как бы не говорили противники читать ОО код куда проще, нежели написанный «сплошняком». Возможно в системах, состоящих из двух-трех файлов и небольшого набора функций, это и не имеет особого значения, но поверьте, если Вы намерены «строить» что-то большое и в дальнейшем это поддерживать, то ООП – и ничего другого.
Вернемся к конструкторам и деструкторам – не смотря на то, что деструктора как такого в PHP нет, мы создадим соответствующую функцию, и будем делать вызов в нужный момент. Подробнее об этом читайте позже в статье «Конструкторы и деструкторы».
Продолжим «объявление» составных частей FrameWork-а, обратим внимание, что если у нас будет работать какая-либо система, то у нее будут возникать ошибки. Я не про те ошибки, которые в программном коде, а те исключительные ситуации, которые воспринимаются за предупреждения и возникающие исключительные ситуации при передаче «неожидаемых» входных данных. О таких ошибках необходимо сообщать пользователю и/или администратору, а соответственно нам необходим обработчик ошибок.
Наша система должна выводить результат, предполагаем, что в браузер на языке HTML, а следовательно нам нужен простейший класс генерации HTML-элементов.
Потому как одним из основополагающих тезисов был объявлен – независимость системы от дизайна (сделаем уточнение, что дизайном является HTML, CSS, изображения и т.п.). Именно поэтому очень рекомендую вам научиться «бить себя по рукам» за каждый HTML тэг/параметр, вставленный в PHP код. И не смотря на то, что такие продукты как phpBB, Joomla, ныне раскрученный в России «битрикс», очень активно используют в коде HTML, я крайне не рекомендую повторять их ошибку и вообще забыть раз и на всегда, что в PHP есть такая «фишка» вставки PHP-кода в HTML. Обо всем этом мы так же поговорим в статье посвященной разделению дизайна и кода.
Если мы договорились, что дизайн и код разделены, нам понадобится шаблонизатор.
Кроме того, пользователи без сопровождения «личными данными», это никуда не годится в любой мало-мальски приличной системе, а следовательно нам, необходим класс сессий.
Данные, с которыми будет работать система, нужно хранить, и лучше всего в БД, у нас должен быть класс работы с БД.
Если вы предполагаете, что ваша система будет использована в больших Интернет ресурсах и не только для тривиальных вычислений (а раз мы занялись ее написанием, то это предполагаем, иначе нечего и мучаться), то нам необходим набор методов для кэширования данных.
Кроме того, потребуются классы для работы с адресами, графами, датой, списками, изображениями, почтой, позициями, конфигурациями, версиями и наконец функциональными блоками (модулями).
Естественно еще один класс – это то самое «чудо», которое заставит все это работать вместе, благодаря чему мы назовем это системой!
Вот кратенько, на мой взгляд, минимальный набор для работы нормальной системы управления сайтом. Именно об этих классах я и буду рассказывать в этой части.
Владимир Бредихин 2006/04/19 22:50
