Модель реляционной базы данных. Многозвенные приложения
Многозвенные приложения
На основе материала из: «Профессиональное РНР программирование» Глава 15, стр. 569-586
Разработка многозвенных приложений ориентирована на создание программного обеспечения, которое легко сопровождать и интегрировать.
Основная идея такого подхода заключается в разделении программного продукта на составляющие с целью обеспечения возможности внесения исправлений в отдельные фрагменты кода без риска нарушения функционирования других компонентов. Здесь под компонентами можно понимать функции, группы функций или программные модули.
Многозвенная архитектура
Разработка многозвенных приложений это такой процесс разработки, в котором приложения строятся из компонентов, находящихся на разных уровнях.
Каждый уровень реализует (содержит код) определенный аспект приложения.
Каждый уровень предоставляет сервисы для других уровней (посредством неизменного интерфейса).
Каждый уровень может быть модифицирован независимо от остальных.
В укрупненном виде в web-приложении можно выделить следующие стандартные уровни:
• Уровень содержимого (Content layer)
• Уровень логики (Logic layer)
• Уровень представления (Presentation layer)
Рис. 1. Уровни веб-приложения
Каждый уровень заключает в себе специфическую часть приложения.
Уровень содержимого должен обеспечивать независимость других частей приложения от способов хранения данных.
Уровень представления должен обеспечивать независимость других частей приложения от средств и способов отображения данных (дизайн интерфейса приложения).
Уровень логики должен получать данные от уровня содержимого и передавать на уровень представления посредством единого интерфейса в не зависимости от используемых способов их хранения и отображения
РНР обладает возможностями, позволяющими применить в программировании многозвенную технологию.
Это, прежде всего возможность модульного программирования и ООП.
Уровень содержимого
Самое важное понятие на этом уровне - модель данных (data model).
Она определяет, как хранятся данные и как с ними следует работать.
Наиболее распространены следующие модели данных:
• Модель плоских файлов
Модель реляционной базы данных
Эти модели должны быть реализованы кодом программы с помощью стандартных объектов, называемых компонентами доступа к данным (Data Access Components), или объектами доступа к данным (Data Access Objects).
Примеры моделей данных:
Модель на плоских файлах:
При использовании такой модели данные хранятся в текстовых или двоичных файлах. Модель состоит из текстуального описания структуры данных и имен, присваиваемых файлам с данными.
Рассмотрим модель данных приложения для голосования в Интернете.
Пусть есть несколько опросов и ряд вариантов в каждом из них.
Модель данных на плоских файлах может выглядеть так:
Файл Polls: (файл вариантов опросов)
Двоичный файл фиксированной длины.
Название опроса: 40 байт.
Вопрос: 250 байт.
Файл Options: (файл вариантов ответов в опросах)
Двоичный файл фиксированной длины.
Название опроса: 40 байт.
Вариант ответа: 80 байт.
Голоса: 4 байт.
Файл Comments: (файл комментариев)
Двоичный файл переменной длины.
????Структура: длина имени (1 байт) + имя + длина комментария (2 байт) + комментарий
Файл Текущий опрос: (файл содержащий название текущего опроса)
Двоичный файл фиксированной длины,
Название опроса: 40 байт.
Чтобы узнать, какое голосование является текущим, можно открыть файл «Текущий опрос», прочесть 40 байт и получить «Название опроса».
После этого можно найти вопрос последовательным поиском «названия опроса» в файле «Polls».
Таким же последовательным поиском можно получить все варианты возможных ответов в файле “Options”.
Голосование заключается только в том, чтобы добавить единицу к выбранному варианту.
Комментарии вводятся путем дописывания данных к файлу комментариев.
Модель данных, основанная на плоских файлах полезна при работе с большими объемами данных или запросами, которые нельзя подогнать под стандартные запросы SQL
Реализация модели с плоскими файлами в РНР осуществляется с помощью функций для работы с файлами:
flock() - переносимая информирующая блокировка файла
fwrite() - Binary-safe запись файла.
fgets() - получает строку от указателя файла
fputs() - записывает в указатель файла
fopen() - открывает файл или URL
fclose() - закрывает указатель открытого файла
fseek() - ищет в указателе файла
ftell() - сообщает позицию чтения/записи указателя файла
unlink() - удаляет файл
file_exists() - проверяет, существует ли файл
filesize() - получает размер файла
и т.д. всего > 70.