ЕВГЕНИЙ ВОЯКИН
Разрабатываем информационные системы на PHP методом визуального программирования
Если вы часто создаете веб-приложения на языке PHP, вам приходится выбирать средства разработки под свои задачи. Некоторых устраивает Блокнот, другие предпочитают Zend Studio или Macromedia Dreamweaver. Мы предлагаем вам инструмент, позволяющий в ряде случаев строить PHP-код целых информационных систем в автоматическом режиме.
Как построить информационную систему
Ни для кого не секрет, что в последнее время автоматизированные информационные системы (ИС) стали сердцем многих бизнес-процессов предприятий и основой общедоступных сетевых сервисов. Как известно, в большинстве информационных систем данные хранятся в БД. Одновременный доступ к ИС нескольких пользователей реализуется с помощью специализированного программного обеспечения, ориентированного на работу в сети. Чтобы поддержать такое взаимодействие, программное обеспечение должно располагаться на обеих сторонах сети – на сервере и на компьютере клиента. Безусловно, такой подход имеет недостаток: помимо однократной установки ПО на сервер подключение каждого нового клиентского компьютера подразумевает установку клиентских программ и на него. Поэтому в последнее время у разработчиков все четче заметно стремление перенести максимально возможную часть специализированного программного обеспечения с клиентских рабочих станций на серверы.
Такой подход позволит вам использовать менее сложные компьютеры с минимальным набором программного обеспечения в качестве клиентских. А это в свою очередь означает снижение затрат на аппаратную составляющую системы. При этом разработчики все чаще основываются на использовании веб-технологий для доступа к информационным системам. В архитектуре системы между клиентским программным обеспечением и серверной СУБД появляется дополнительный уровень, который можно назвать уровнем веб-транспорта. На стороне сервера он представлен веб-сервером с модулями функционального расширения, на клиентской – веб-браузером в качестве универсального клиентского программного обеспечения. Этот уровень реализует возможность информационного обмена в сети.
Какой инструмент выбрать разработчику
Учитывая эти тенденции, многие фирмы направляют свои усилия на развитие и совершенствование технологий и инструментария в области веб-программирования. Примерами могут служить технологии от Microsoft, под которые созданы мощные средства разработки (к примеру, Interdev), среда Zend Studio, созданная разработчиками языка PHP (см. [1]). Познакомившись с этими пакетами и осознав, насколько отличаются их функциональные возможности, у меня сложилось ощущение некой ограниченности в средствах доброй части программистов, пишущих на PHP. Действительно, предлагаемая компанией Microsoft среда Interdev содержит всё необходимое для построения динамических веб-страниц, поддерживает визуальное программирование интерфейса, параметры оформления документов и работу с базами данных.
В то же время почти все представленные на рынке средства разработки на языке PHP, включая даже достаточно мощную среду Zend Studio, представляют собой лишь развитые текстовые редакторы, ориентированные на работу с текстами на языках программирования. Тем не менее, именно язык PHP, СУБД MySQL или PostgreSQL, как показывает практика, наиболее часто выбираются нами при разработке целого ряда информационных систем, особенно на *nix-платформах. Эти средства обоснованно заслужили популярность своей простотой и, одновременно с этим мощностью и надежностью. Кроме того, они доступны бесплатно, что немаловажно для многих разработчиков.
С моей точки зрения, современные инструменты разработки на PHP должны предоставлять следующие возможности:
- максимальная автоматизация разработки веб-документов;
- комплексная поддержка разработки приложений, ориентированных на работу с базами данных, возможно, с поддержкой создания самих баз данных;
- поддержка визуальной методики программирования (как у «больших братьев» – Delphi, C Builder).
Частичное решение этих задач в той или иной мере успешно достигалось различными разработчиками средств программирования, но полного комплексного решения этих задач в едином инструменте мне до сих пор не встречалось.
Имея определенный опыт разработки информационных систем, я опишу некоторые методы, которые позволят перенести технологию визуальной разработки в область программирования на языке PHP. Объединение этих методов и алгоритмов по работе с информацией в базе данных позволило мне создать интегрированную визуальную среду программирования. Эта среда дает возможность разрабатывать интерфейсы доступа к базам данных посредством веб-технологий и в ряде случаев комплексно автоматизирует создание ИС в целом.
Что следует автоматизировать
Разработка любой информационной системы не является простой задачей. Вне зависимости от того, какую информационную систему бы вы ни проектировали, будьте готовы столкнуться с некоторыми «классическими» этапами разработки, а именно вам придется:
- спроектировать базу данных (а перед этим будет изучение предметной области, построение ее модели, разработка логической, а затем физической модели данных в средствах той или иной СУБД, нормализация базы и т. д.);
- запрограммировать базу данных непосредственно в СУБД;
- выбрать, как пользователи будут получать доступ к данным – то есть спроектировать интерфейсы (определить их количество и функциональные требования к ним, выбрать средства и инструменты программирования, разработать алгоритмы);
- осуществить программирование интерфейсов;
- отладить ИС в целом.
Нетрудно заметить, что данная работа потребует от вас значительных знаний в как минимум трех областях – программирования, проектирования баз данных и знания веб-технологий. Безусловно, если вы гуру в SQL и постоянно занимаетесь разработками в данной сфере, решение этих задач не составит труда. Однако для начинающего программиста, сталкивающегося с такой задачей время от времени, ее решение займет много времени.
Как я заметил ранее, почти все призванные помочь разработчику в данной ситуации средства программирования на языке PHP по сути представляют собой лишь развитые текстовые редакторы, поддерживающие работу с текстами на языках программирования. Исключением, пожалуй, может являться только Macromedia Dreamweaver, позволяющий осуществлять визуальную разработку веб-форм и поддерживающий подключение к MySQL.
Технология визуального программирования даст вам возможность существенно сократить время создания программного модуля. Представьте любой веб-интерфейс к базе данных в некой информационной системе. При традиционном написании кода с увеличением числа элементов в веб-форме время, затраченное вами на создание такой страницы, будет возрастать не линейно, а более стремительными темпами. Это объясняется тем, что для реализации тех или иных особенностей вам потребуется вводить все больше переменных, циклов, ветвлений. Станет сложнее отслеживать синтаксис и логику сценария. Кроме того, при этом возрастет и сложность базы данных – наличие большого числа интерфейсных элементов означает существование соответствующего числа полей таблиц для хранения значений.
Применение визуальной интегрированной среды может снять с вас все эти трудности. В идеале время должно затрачиваться лишь на определение связи интерфейсного элемента веб-формы с теми или иными данными в базе. Остальные задачи – включение в код сценария тегов HTML, реализующих элемент, функций, осуществляющих запросы к базе данных для отображения значений в элементе, разработка структуры базы данных, процедуры верификации и во многом отладки создаваемого программного кода – должны выполняться для вас средой.
«Визуализируем» программирование
Как перенести концепцию визуального программирования в, казалось бы, изначально «невизуальную» область? Ведь по своей сути PHP не является языком программирования широкого назначения и не позволяет строить пользовательские интерфейсы. Но в нашем случае от него это и не требуется. Как известно, основу для интерактивного взаимодействия посредством веб-технологий содержит сам язык HTML, позволяющий строить веб-формы. Следовательно, «визуализировав» работу с интерфейсными элементами формы и разработав систему взаимосвязи этих элементов с базой данных посредством языка PHP, мы получим методику визуального программирования на PHP в области разработки веб-интерфейсов для информационных систем.
Можно сказать, что данный подход создает достаточный фундамент для существенной автоматизации процесса разработки. Замечу, что этот метод, разумеется, не автоматизирует разработку любых сценариев на PHP полностью, но он позволяет строить целый класс приложений на PHP (в частности – веб-интерфейсов к БД), вообще не сталкиваясь с кодом сценария на языке PHP. Для многих других приложений (отображающих информацию из баз данных или содержащих веб-формы) применение данного метода позволит снять с разработчика большую часть работы по рутинному написанию кода приложения на языке PHP и тегов HTML.
Среда визуальной разработки
Не найдя «идеальной» среды под свои задачи, я решил опробовать данный подход на практике и создать инструмент визуального программирования на языке PHP самостоятельно.
При создании своей среды, получившей условное название «Синбад» (от «Сетевой ИНтерфейс к БАзе Данных»), я не ставил задачи получить полностью универсальное средство программирования на PHP. Действительно, сложно разработать инструмент, более полно использующий средства языка, нежели Zend Studio, созданный разработчиками PHP.
Но обладая меньшими функциональными возможностями в области работы с веб-формами и базами данных, «Синбад» существенно превосходит Zend Studio: он позволяет реализовать методику визуального программирования и осуществляет комплексную разработку компонентов информационной системы.
При этом среда не ограничит вас только возможностью разработки интерфейсов. В конечном итоге применение среды позволяет задействовать для реализации целого ряда задач программистов существенно менее высокой квалификации, нежели могло бы потребоваться при традиционной процедуре разработки приложений.
«Мощность», или степень, до которой данная среда позволит вам автоматизировать процесс разработки веб-приложений на PHP, вполне сопоставима с той, до которой позволяет автоматизировать разработку обычных приложений хорошо известные среды Borland Delphi и C Builder, а в некоторых случаях и превосходит их. Так, при использовании Синбада для построения интерфейсов к БД результатом работы программы может быть полностью функционально готовый интерфейс, полученный абсолютно без применения ручного написания кода. В продуктах Borland визуальное программирование позволяет лишь построить пользовательский интерфейс – окно приложения. Любую смысловую связку интерфейсных элементов окна вам придется осуществлять вручную.
Разработка программы осуществлена на Delphi, Синбад рассчитан на выполнение под управлением операционной системы Microsoft Windows. Работоспособность программы проверена в версиях 98, 2000 Professional, XP Pro, XP Home.
Работа с новым инструментом
Работа в среде предусматривает редактирование проектов. Каждый проект предполагает работу со своей БД и имеет ряд настроек – название, каталог, в котором хранятся файлы проекта, нацеленность на различные операционные системы (кодировки символов Windows-1251, koi-8r, символы переноса строки #13#10 или #10). Также задаются параметры для подключения к базе данных: ее тип, имя, логин, пароль, имя сервера и т. п.
Проект состоит из одной или нескольких страниц, работающих с единой базой данных. Каждая из страниц может выполнять одно действие по манипуляции с данными, определяемое назначением страницы.
В свойствах проекта можно также определить единые для всех страниц проекта шаблоны заголовков и концевиков страниц, в которых возможно задание параметров оформления.
Пользовательский интерфейс (см. рис. 1) программы представляет собой окно, состоящее из двух закладок – «Мастерская» и «Редактор». В верхней части расположено меню, содержащее вызов основных операций, которые могут потребоваться при разработке приложений.
Рисунок 1. Пользовательский интерфейс среды «Синбад». Режим построения формы
Закладка «Мастерская» предназначена для визуальной разработки PHP-приложения. Панель инструментов включает восемь кнопок для быстрого доступа к пунктам меню: создать, открыть и сохранить страницу проекта, вызов свойств страницы, свойств элемента, удаление элемента, вызов окна базы данных и преобразование, или, по аналогии с другими визуальными средами разработки, «компиляция» страницы в PHP-код.
Палитра компонентов состоит из набора некоторых, наиболее часто используемых элементов языка HTML (параграфы, ссылки, списки и т. п.) и интерфейсных элементов для построения веб-форм.
Рабочее поле программы служит для визуального построения страницы. На это поле из палитры с помощью мыши могут быть перенесены те или иные элементы в соответствии с вашими задачами. Нажатие на элемент правой кнопкой мыши открывает его контекстное меню. Таким образом, при построении страницы вы сталкиваетесь не с ручным вводом тегов языка HTML, а с «визуализованными» элементами, имеющими такой же внешний вид, какой они приобретут при отображении страницы в браузере, что значительно нагляднее.
Определять свойства элементов страницы вы можете с помощью набора окон, позволяющих задать имя элемента и его исходное состояние, закрепить связь с базой данных и т.п. К примеру, вид окна, управляющего списками выбора, представлен на рис. 2.
Рисунок 2. Это окно позволит вам управлять свойствами списков выбора
В качестве примера представлены свойства элемента place. Как видите, элемент имеет вид строки с выпадающим списком (размер равен 1). Для списка задано наполнение исходными данными из таблицы place: используются столбец id (для значений элементов списка) и caption (для текстовых меток). При выборе имеется возможность определить условие отбора строк – в данном случае для наполнения списка используются все строки с id>10.
Преобразование элемента, имеющего эти свойства, в PHP-код приведет к формированию следующего фрагмента кода (для СУБД MySQL):
<SELECT NAME="place» SIZE="1">
<?php
$rz = mysql_query("select id, caption from place where id>10 order by 1;");
while ($row = mysql_fetch_row($rz)) {
print ("<OPTION VALUE=$row[0]>$row[1]</OPTION>\n");
}
?>
</SELECT>
Нижняя часть окна позволяет определить связь с базой данных. В данном случае выбор строки списка, сделанный будущим пользователем этой страницы, повлияет на значения столбца place_id таблицы events.
Возможности визуального построения сценариев не ограничиваются только элементами веб-форм. Для элементов палитры HTML-тегов окна свойств в первую очередь позволяют определить параметры отображения в браузере или предоставляют наглядный интерфейс для определения тега (например, для параграфов текста).
При построении кода страницы на языке PHP результат помещается в редактор кода для проверки и корректировки. Этот редактор (см. рис. 3) содержит в свою очередь четыре закладки для работы с текстами. Первые две предназначены для редактирования основного (с формой) и подчиненного (вызываемого из формы) сценариев, образующих страницу. В окно третьей помещается текст дампа базы данных, а последняя предназначена для работы в интерфейсе среды с любыми файлами по усмотрению пользователя.
Рисунок 3. Пользовательский интерфейс среды «Синбад». Режим редактора кода
Панель инструментов редактора содержит кнопки, позволяющие вам открыть файл в редакторе или сохранить редактируемый файл, работать с буфером обмена, редактором шаблонов. Для ввода тегов языка HTML редактор имеет дополнительную панель с кнопками (на рис. 4, в левой части окна), нажатие на которые приводит к вставке HTML-тега в позицию курсора.
Рисунок 4. Так выглядит спроектированная страница в окне браузера
Среда предоставляет возможность создавать свои шаблоны кода, имеет систему предиктивного набора идентификаторов. Список последней системы вы можете изменить по своему усмотрению.
Процедура построения файлов на языке PHP, которую по аналогии с другими средами визуального программирования можно назвать компиляцией, запускается по окончании пользователем проектирования интерфейса. Вы можете запускать эту процедуру всякий раз, когда хотите проверить целостность проекта и правильную связанность интерфейсных элементов с теми или иными полями базы данных.
В результате компиляции вы получите готовый программный код на языке PHP и требуемые теги HTML, отображающие всю страницу в целом в соответствии с ее функциональным назначением.
Для генерируемого кода определяются следующие требования. Код должен:
- отображать все элементы страницы в таком же порядке, как они были расположены вами на рабочем поле среды при проектировании;
- выполнять все необходимые операции, связанные с элементом: наполнение исходными данными, выбор исходного значения и т. п. – для сценария с формой; манипуляция с определенными пользователем данными в базе данных – для вызываемого сценария.
Среда начинает построение сценариев с файла, в котором будет находиться веб-форма. Прежде всего в текст будущего сценария включаем шаблон заголовка, позволяющий определить единые для всех сценариев параметры оформления. Далее определяем взаимное расположение друг относительно друга интерфейсных элементов и элементов, относящихся к языку HTML. Для этого используется специально разработанный алгоритм. При обработке элементов веб-форм для них осуществляется генерация кода на языке PHP, отображающего элемент в браузере, а также кода, реализующего связанные с элементом операции по наполнению его исходными данными и т. п. Для объектов языка HTML генерируем текст тега в соответствии с заданными параметрами.
При компиляции кода элемента Синбад проверяет, достаточно ли задано для этого данных. Если при обработке в свойствах встретится ссылка на поле несуществующей таблицы или на несуществующее поле (например, таблица или поле были переименованы после определения связи элемента с ними), преобразование приостановится. Вы получите соответствующее уведомление с указанием элемента, а также поля или таблицы, которые не были обнаружены.
По окончании обработки всех элементов генерация главного сценария завершается включением в него текста шаблона концевика файла.
Генерация вызываемого сценария происходит по похожей схеме. Основным отличием от описанного механизма является то, что в тело подчиненного сценария встраивается операция по манипуляции данными непосредственно в БД. В случае, когда назначением страницы является ввод данных, среда проверит, достаточно ли информации для добавления новой записи в таблицу. Если с каким-либо полем записи не связано элемента, то это поле, в зависимости от типа, заполняется либо нулем, либо пустой строкой. При этом вам также выводится соответствующее предупреждающее сообщение (см. рис. 5).
Рисунок 5. Выполняется преобразование в PHP-код. Отладочные сообщения
Пример того, как в окне браузера отображается страница, проектирование которой показано на рис. 1, показан на рис. 4.
При разработке среды в качестве параметров оптимизации генерируемого кода на языке PHP я выбрал следующие критерии:
- Не требуется сохранять параметры оформления генерируемой страницы в максимально возможной степени. В результате компиляции кода в полученной странице не гарантируется расположение элементов точно так же и с такими же расстояниями между элементами, как они располагались на этапе проектирования. Однако среда обеспечит соблюдение взаимного расположения элементов друг относительно друга;
- Применение максимально простых шаблонов кода, упрощающее понимание технологии создания страницы разработчиком и облегчающее дальнейшую их модификацию;
- Использование строго ограниченного набора функций на языке PHP для работы с базами данных. Имена функций хранятся во внешних текстовых файлах, редактирование которых позволит вам работать в среде с практически любой СУБД, поддерживаемой языком PHP.
Первый критерий, как может сначала показаться, идет в ущерб функциональным качествам и возможностям среды. Однако эта особенность включена в программу намеренно. Как показывает практика, опытные дизайнеры даже после оформления страницы с помощью тех или иных автоматизированных средств «шлифуют» страницы вручную, уже после разработки и отладки программной части.
Учет данных критериев позволит вам достичь получения в результате «компиляции» легкочитаемого высоконадежного кода на языке PHP. Этот код не требует дальнейшей верификации и может быть легко модифицирован и использован в качестве основы при разработке сложной страницы, дополнен параметрами оформления с помощью стилей и т.п.
Именно в силу этих особенностей (и мой опыт практического применения Синбада подтверждает это) работа с программой значительно ускоряет разработку интерфейсов к информационным системам в целом.
Доступ к данным
Для проектирования базы данных Синбад требует наличия в операционной системе подключения к СУБД через источник ODBC с именем Sinbad. Следует отметить, что вы должны создать такой источник в операционной системе до начала работы с программой. Среда имеет интерфейс для ручного управления структурой базы данных (см. рис. 6), позволяющий добавлять и удалять таблицы в базе, управлять полями таблиц – удалять ненужные, создавать новые, задавать их тип, вводить, изменять и удалять данные в любой из таблиц и т. п.
Рисунок 6. Встроенный интерфейс управления базой данных
В случае если непосредственное подключение к серверу базы данных посредством источника ODBC невозможно (отсутствует доступ, в вашей системе нет источника ODBC требуемого типа и т. п.), можно определить источник любого типа, например, Microsoft Access Driver (*.mdb), ссылающийся на пустую базу данных. При разработке в ней будут созданы необходимые таблицы. Во время построения кода сценариев (при компиляции) среда также автоматически выполняет генерацию дампа полученной к моменту компиляции базы данных. Вы можете перенести этот дамп непосредственно в сервер СУБД. Универсальность и переносимость дампа достигается за счет применения в нем для управления структурой базы и данными операторов на языке SQL.
Среда предусматривает возможность определения автоматической связи между элементом и столбцом одной из таблиц базы данных. При этом у вас возникает возможность автоматизировать процесс разработки структуры базы данных, основываясь на информации, получаемой из визуального программирования.
Пример структуры автоматически разрабатываемой базы данных приведен на рис. 7. В качестве примера приводится интерфейс для базы данных «афиши концертов».
Рисунок 7. Схема автоматизации разработки структуры базы данных
Таким образом, при построении нового проекта некой информационной системы Синбад позволяет полностью снять с вас задачу проектирования базы данных – она будет разработана автоматически. Единственной рекомендацией в данном случае будет необходимость задавать для элемента осмысленное имя до назначения ему автопривязки к БД, так как при создании полей таблиц будет использовано имя элемента.
В классическом случае проектирование базы данных выполняется в несколько этапов, среди которых можно выделить:
- изучение предметной области, в которой производится разработка;
- построение модели предметной области;
- разработка логической модели данных;
- разработка физической модели данных в средствах той или иной СУБД;
- программирование базы данных непосредственно в СУБД.
Создание БД на этапе построения интерфейса к ней по сути является методом, позволяющим вам в целом ряде случаев получить готовую физическую модель БД непосредственно из модели предметной области. Действительно, на этапе создания интерфейса достаточно представлять себе лишь модель предметной области. Так, в нашем примере БД, содержащей концертную афишу, вам достаточно разработать элементы интерфейса для ввода свойств предметной области – названия концерта, времени и места его проведения, перечня артистов и прочее. Задача проектирования конечных таблиц, ключей и связей в них и т. п. с вас снимается. В данном случае целесообразно для выбора места проведения концерта и артиста использовать списки выбора, тогда с этими данными автоматически будут связаны отдельные таблицы. Остальные атрибуты концерта могут быть введены через текстовые поля и автоматически попадут в главную таблицу, содержащую помимо этих атрибутов и первичный ключ, и ключ места проведения.
Разумеется, при построении сложных многоуровневых систем или при «классическом» подходе к проектированию информационной системы такой подход является неверным – проектирование базы данных должно предшествовать разработке интерфейса. Но я хочу отметить, что такая функциональная возможность вполне может быть использована в целом ряде случаев, когда структура базы данных не очень сложна или изначально очевидна.
Что дальше
На текущий момент остаются нерешенными некоторые задачи, касающиеся функциональных возможностей среды разработки. Требуется разработка механизма сохранения результатов компиляции с учетом изменений, сделанных программистом в конечном коде программного модуля на языке PHP. На текущий момент, если вы отредактировали полученный в результате компиляции код, то при последующей компиляции его изменения будут потеряны. Также необходима доработка редактора кода. В среде пока нет системы выделения синтаксических элементов языка различными цветовыми схемами и нумерации строк.
Возможно, отмеченные недостатки будут исправлены в последующих версиях среды. Также планируется добавить возможность проверки вводимых пользователем в элемент значений с помощью скриптов на JavaScript.
Разрабатываемый продукт будет бесплатным, бета-версии в скором времени будут доступны по адресу http://evgy.opennet.ru.
Литература:
- Воякин Е. Zend Studio 4.0 – новая версия, новые возможности. – Журнал «Системный администратор», №2, 2005 г. – 75-79 с (http://www.samag.ru/cgi-bin/go.pl?q=articles;n=02.2005;a=15).