![]() |
![]() |
| http://kurepin.ru/php/slang.ru/3/ |
|
Строим сайт Глава 3. Планирование-1: class_word и class_dic Один очень умный человек сказал, что в программировании большую (ударение на первом слоге) часть времени надо посвятить планированию проекта. Я согласен с этим утверждением на сто процентов! Любой более-менее крупный проект следует писать с применением объектно-ориентированного программирования (ООП). Это не только мое мнение, это мнение большинства программистов, знающих свое дело. Если вам не знакомы основополагающий принципы ООП, снова отсылаю вас к моему древнем который позволит вам понять и освоить ООП буквально за час-другой. ООП - это методика программирования с оглядкой на устройство мира. Окружающий нас мир построен из маленьких объектов, которые складываются в объекты покрупнее, те, в свою очередь складываются в объекты еще большего размера и так дальше - от молекул до вселенных. Соответственно, вспомнив о том, что сайт наш посвящен словарям, давайте разрабатывать объектно-ориентированную модель сайта slang.ru с молекул. Пожалуй, самым маленьким объектом системы slang.ru можно назвать - слово. Из слов составляются словари, которые потом будут объединены в тематические группы и так дальше. Первым классом проекта назовем класс слов: class_word Можно сразу описать его каркас и уложить в виде файла word.class в папку /req нашего проекта: highlight_string(' require(str_replace(\'/www\',\'/req\',$_SERVER[\'DOCUMENT_ROOT\']).\'/utils.class\'); class class_word extends class_utils { } ?>');?> Заинтересовала первая строка? Все очень просто: для работы сайта нам необходимо описать ряд переменных, обеспечить доступ к базе данных и забронировать место для обязательных утилит. Все это мы опишем в классах init, mysql и utils, от которых уже и будем растить наше древо классов. Про str_replace: можно было бы написать require('путь до файла utils.class'), но я предпочел взять из переменной окружения путь к сайту ('/opt/www/slang.ru/www' в моем случае) и заменить 'www' на 'req' с помощью str_replace, чтобы получить путь к папке 'req'. Такая конструкция позволяет копировать или переносить сайт по разным директориям без необходимости исправлять путь во всех class-файлах. Содержимое классов init, mysql и utils опишем чуть позже, когда закончим планирование. Поехали дальше. Что мы можем сложить из слов? Можем сложить уже сами словари. Соответственно, следующим классом у нас получается класс class_dic в файле dic.class: highlight_string(' require(str_replace(\'/www\',\'/req\',$_SERVER[\'DOCUMENT_ROOT\']).\'/word.class\'); class class_dic extends class_word { } ?>');?> Пожалуй, это наши основные классы. От них мы будем ответвлять уже специализированные классы. Но это потом, а сейчас давайте наполним классы основными переменными и функциями. Слово. Чтобы описать слово в базе данных, нам понадобится как минимум поле для самого слова (цепочка букв) и уникальный идентификатор для этого слова. Поэтому базу данных можем начать с такой конструкции:
create table tbl_word
(
w_id int unsigned not null auto_increment primary key,
w_word varchar(100) not null default '',
w_enable enum('Y','N') not null default 'Y'
);
w_enable - это флаг "видимости" слова; он наверняка нам пригодится, поэтому я его сразу включил в таблицу слов. Таблицы будут создаваться и модифицироваться в процессе создания проекта, поэтому все sql-команды предлагаю вам последовательно в хронологическом порядке складывать в текстовый файл и сохранять, скажем, в директории /info. Классовые переменные, хранящие данные о слове, предлагаю называть аналогично с названиями полей в sql-таблице: highlight_string(' var $w_id, $w_word, $w_enable; ?>'); ?> Основными функциями по работе со словами очевидно будут следующие: highlight_string(' function word_add() // функция добавления слова { } function word_update() // функция изменения слова { } function word_delete() // функция удаление слова { } function word_prepare() // функция подготовки данных { }');?> word_prepare() - функция по проверке и подготовке данных перед их отправкой в базу данных. Эта функция очевидно должна вызываться из функций по добавлению и изменению слова. Теперь разберемся со словарями. По сути, на начальном этапе структура базы данных и функции словарей - очень похожи на структуру и функции class_word, от которой мы и породим class_dic: highlight_string(' require(str_replace(\'/www\',\'/req\',$_SERVER[\'DOCUMENT_ROOT\']).\'/word.class\'); class class_dic extends class_word { } ?>');?> Таблица:
create table tbl_dic
(
d_id smallint unsigned not null auto_increment primary key,
d_name varchar(255) not null default '',
d_enable enum('Y','N') not null default 'Y'
);
идентификатор, название и "видимость". Переменные: highlight_string(' var $d_id, $d_name, $d_enable; ?>'); ?> Функции: highlight_string(' function dic_add() // добавление словаря { } function dic_update() // изменение описания/параметров словаря { } function dic_delete() // удаление словаря { } function dic_prepare() // функция подготовки данных { } ?>');?> Ну, вот у нас уже какой-никакой скелетик начал вырисовываться. Совсем скоро будем на него мясо наращивать. Поехали дальше! 02.08.04 |