Для тех, кто думает об оптимизации, такой тип рекурсии нельзя назвать оптимальным. Каждая тема делает свой вызов функции showMessages, который приводит к запросу к базе данных. Однако есть метод, при котором достаточно одного запроса к базе данных с последующим просмотром дерева сообщений из памяти, и автор оставляет его читателю для самостоятельных упражнений.
После щелчка на названии темы страница перезагружается с заданным значением messageID, и сценарий переключается в режим отображения сообщений. Поля сообщений отображаются в таблице. Если сообщение содержит какой-либо HTML-код, оно будет отображаться браузером, так как не было предпринято никаких попыток отфильтровать его. Это ограничение лучше всего использовать в качестве кода, добавляющего новое сообщение.
Независимо от двух режимов, отображается сообщение для добавления нового сообщения. Если сообщение добавляется, пока отображается список сообщений, то оно будет добавлено на корневом уровне. Если сообщение добавляется в то время, когда пользователь просматривает сообщение, оно будет считаться ответом. Новое сообщение будет порожденным по отношению к просматриваемому сообщению.
Это пример достаточно простой BBS. Более сложное решение может включать предоставление права добавления сообщения только аутентифицированным пользователям или сохранять сообщения закрытыми до того, как модератор не решит обратного. Этой же программной структурой можно воспользоваться для написания любого приложения, которое бы обрабатывало данные, введенные пользователями, как, например, это делается в гостевой книге. Достаточно хорошую реализацию BBS можно найти в проекте форума Брайана Муна (Brian Moon) (<http://www.phorum.org/>).
23.4. Уровни абстракции базы данных
Представим создание Web-приложения, которое сначала использует в своей работе СУБД MySQL, а затем переводится на работу с СУБД Oracle. Все функции PHP являются различными, поэтому потребуется полная переделка всего. Кроме того, и MySQL, и Oracle используют немного различные диалекты языка SQL, поэтому вероятно потребуется внести изменения практически во все запросы. Одним из решений этой задачи является применение уровня абстракции. Он позволяет отделить логику работы вашего приложения от программного кода, с помощью которого реализован интерфейс с базой данных. Одна функция вызывает правильную функцию на основании типа базы данных, к которой делается запрос.
Вероятно, наиболее популярным уровнем абстракции является часть PEAR (<http://pear.php.net/>). Эта библиотека также содержит код, предназначенный для управления сеансами.
Несмотря на имеющиеся уровни абстракции, несовместимость между базами данных продолжают затруднять работу. Так, СУБД MySQL в своей работе использует специальную спецификацию в определениях столбцов, которая называется AUTO_INCREMENT. Это приводит к тому, что столбец должен заполняться автоматически целыми числами в возрастающем порядке. В СУБД Oracle таких же результатов можно добиться за счет применения последовательности и триггеров. Это различие с трудом поддается автоматизации. В 1999 году Скот Эмблер (Scott Ambler) в своей статье "Разработка устойчивого живучего уровня для реляционных баз данных" ("The Design of a Robust Persistence Layer for Relational Databases") (<http://www. ambysoft.com/persistenceLayer.html>) предложил решение. В этой работе была сделана попытка точного анализа проблемы и разработан детальный проект.
Для обеспечения устойчивости реализации уровня абстракции потребуется потребление дополнительных ресурсов. Некоторые из уникальных высокопроизводительных характеристик конкретных баз данных будут утеряны, таким образом, уровень абстракции обеспечивает обычные возможности. Но за этот счет приобретается независимость от конкретной базы данных.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. Интеграция баз данных. Часть Восьмая.
03-06-2015
<< Предыдущая статья | Следующая статья >> |
PHP. Интеграция баз данных. Часть Седьмая. | PHP. Сети:HTTP-аутентификация,Управление кэш-памятью браузера,Установка типа документа |