Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

На пути создания X-Двигателя сайтов Двигатель это сложная система


Информационный Канал Subscribe.Ru

«На пути создания Х-двигателя сайтов»
Автор рассылки: Хусамов Сухроб
Выпуск № 3
17 июня 2004

Двигатель это сложная система

Приветствую! В этом выпуске я собираюсь немного рассказать о терминах, так как их буду активно использовать на протяжении всей рассылки. Термины взяты из разных источников и немного мной подредактированы. И естественно они не каменные, то есть возможно я их потом буду исправлять либо вы мне напишите, что что-то у меня не так.

И вторая тема это краткое описание двигателя сайта как сложной системы. Тут есть моменты, которые я считаю важными. Это абстрагирование ядра системы от модулей, расширяющих это ядро. А также стандартизация всего и вся для стабильной работы системы и удобства для разработчика.

И в конце выпуска расскажу о шаблонах дизайна.

И еще, рассылка будет производится не регулярно, приблизительно 2-3 раза в месяц. О более продолжительных перерывах буду извещать отдельно. Кроме того, как я уже сообщал, будут спецвыпуски. Один из спецвыпусков скоро выйдет.

Кстати, о ваших письмах

Небольшое отступление. Все, что здесь излагаю, я не считаю истиной в конечной инстанции. Поэтому ожидаю писем (собственно уже получаю, но мало). И хочу объявить, что ваши письма буду публиковать на свое усмотрение (за исключением писем, в которых будет просьба не публиковать). Причем, по-умолчанию, публикую весь текст или фрагмент письма и ваше имя. Адрес почты публиковать буду только по отдельной просьбе.

Термины

Хотел сначала давать в виде таблицы, но теперь думаю, что будет интересней дать в виде повествовательного текста. А таблицу мы потом построим, в спецификациях (Кстати, вопрос на засыпку, а вы знаете что такое спецификация и как она пишется? Тому, кто первый интересно и доходчиво ответит, лично вручу бутылку с гранатовым соком). Итак, начну.

Сайт это адрес, набор рубрик, набор функций. Сей термин к самому двигателю я пока не привязываю.

Контент это информационное содержание сайта.

Рубрика есть основная единица структуры сайта (синоним раздела). Рубрика это промежуточный элемент структуры сайта. Совокупность рубрик описывает структуру сайта. Рубрике может соответствовать от одной и более страниц. Рубрики могут иметь подрубрики, т. е. образовывать иерахическую структуру сайта. Далее я опишу что собственно еще скрывается за рубрикой.

Шаблон ввода/вывода записей из источника данных (кратко шаблон или шаблон в/в). Шаблон определяет для своего источника данных формат вывода списка записей. Другими словами определяет правила оформления данных из источника данных. Также определяет процедуры добавления, обновления, удаления, поиска, выборки и пр.

Источник данных это таблица с дополнительными (пользовательскими) полями. Управляется из шаблона ввода/вывода.

Список (более строго классификатор). Обозначает набор однотипных перечислимых данных. В некотором роде классификаторы это справочники. Примерами типичных классификаторов могут служить список городов, пол (мужской и женский), валюта ($, DM, рубли) и т. д.

Шаблон дизайна (кратко дизайн). Шаблон из себя представляет совокупность одного html-файла и всех присоединенных к нему файлов. HTML-файл содержит специальные маркеры, определяющие области ввода/вывода информации, и вызовы различных системных фукнций (навигация и пр.).

Область ввода/вывода в шаблоне дизайна (кратко область в/в). В эту область осуществляется подстановка данных, оформленных по правилам шаблона ввода/вывода. В описании рубрики присутствует таблица соответствий областей и шаблонов ввода/вывода, каждому шаблону ввода/вывода соответствует один источник данных.

Пока хватит. Остальное будем определять в следующих выпусках. Теперь займемся общей постановкой задачи.

В общем о двигателе

Перед тем, как дать понятие о двигателе как о сложной системе, хочу рассказать как не должен выглядеть инструмент для создания сайтов.

Я полагаю, раз вы подписаны на мою рассылку со столь загадочным названием, то уже имеете опыт знакомства (работы, написания, — нужное подчеркнуть) с движками, контент менеджерами, CMS и пр. Иначе просто не поняли бы зачем нужна такая рассылка. Также имеете представление как выглядят уже существующие системы и, возможно, имеете представление как они должны выглядеть. Я считаю неверным, если двигатель как-то выглядит. Сейчас поясню.

Двигатель, на мой взгляд, это инструмент для создания, а не конструктор, из которого вы сможете создать сайт А и сайт Б, а вот сайт В чтобы создать нужен модуль Г и модуль Д. Ах, вы хотите сайт Е, тогда вам нужен модуль Ё и немного его допрограммировать. Я написал инструмент для создания (чего?). Просто сайт это не только то, что вы находите в интернете. Сайт можно сделать для локальной сети и использовать как обычную программу (даже для обработки каких-то данных). Только вот интерфейс у этой программы будет наблюдаться через броузер. Впрочем, это я отклонился.

Инструмент не должен как-то выглядеть. Результат должен как-то выглядеть. Вы видели когда-нибудь, чтобы с программой Photoshop поставлялась библиотека картинок, созданных в этом инструменте, которые предлагались бы для использования в ваших последующих работах (как шаблоны)? Сейчас есть много двигателей, в составе которых имеются подобные библиотеки. И они на полном серьезе предлагаются для использования как шаблона для вашего же сайта. Я этого не понимаю. Наверное такие библиотеки нужны для обучению инструменту на примере. Но не более того.

Инструмент не должен как-то выглядеть. Плох тот инструмент, который похож на мага-волшебника. Нажми на кнопку и ты получишь то, что хотел. Вы замечали, что иногда при работе в визуальных HTML-редакторах получаешь не то, что хотел? Например, делаешь новую строку (принудительную строку, Shift+Enter) после строки со ссылкой на конце и начинаешь набирать текст, а ссылка почему-то продолжается, хотя набираешь просто текст следующего предложения. А все очень просто, разработчики программы решили, что тег BR не является разделителем других тегов. А ведь этот тег должен разделять текст только внутри тега P (я имею ввиду по-умолчанию). Но тот, кто не знает тонкостей HTML и не заглядывает на вкладку HTML-source, будет удивляться тому, что программа якобы не правильно работает. Это хорошо, если такая вкладка есть и можно туда заглянуть (изучив предварительно HTML). Но вот в двигателях обычно подобные вещи не предусмотрены. Ну не заглянуть внутрь, чтобы посмотреть более низкие абстракции и понять почему на высоких уровнях абстрагирования возникают непонятные вещи.

Двигатель это система и весьма сложная

Итак, о самом главном в этом выпуске. На мой взгляд сайт должен быть полностью автоматизированным. Это следствие того, что раз есть компьютер, то на него надо возложить вещи по автоматизации труда человека. К примеру, зачем нужно человека заставлять думать об оформлении своей статьи (заголовки, абзацы, таблицы и пр.), давая ему в руки визуальный HTML-редактор (это делается повсеместно во всех движках)? Он хочет набрать текст, у него наверное нет особо много времени на оформление текста (да и зачастую нет опыта в этом).

В идеале сайт должен быть автоматическим (то есть вообще жить без участия человека). А почему бы и нет? Например, интернет-магазин теоретически может быть таким. Или сайт какого-либо журнала-газеты.

А так как что-либо полностью автоматизировать задача не тривиальная, то двигатель (который в этом помогает, а не делает все сам) будет представлять из себя сложную систему.

Сделаю приблизительный набросок. Двигатель это инструмент. Значит он не есть готовый к использованию сайт. Двигатель особый инструмент, так как он всегда будет находится вместе с сайтом, то есть его основа. Двигатель как программа делится на подсистемы: центральную (ядро) и функциональную периферию (модули, выполняющие системные и прикладные функции). Ядро реализует весьма абстрактные функции, а периферия более реальные. Кстати, если у кого есть идеи конкретизировать что есть ядро и как его делять (в общем смысле, для любой сложной системы) присылайте, подискутируем.

На сегодня, в плане теоретических выкладок, пока все. И теперь на десерт предлагаю ознакомится с шаблонами дизайна и как они работают в моем двигателе совместно с шаблонами ввода/вывода. Начну с того, как в общем функционирует мой двигатель.

Введение в мой двигатель

В прошлом выпуске я дал понять, что шаблоны ввода/вывода это главное в двигателе. Но не рассказал как они мной используются. Итак, рассказываю (с использованием терминов, описанных выше).

Динамический сайт это некий черный ящик, который генерирует нужные страницы по запросам посетителя. Запросы можно записывать вручную, но чаще используют готовые запросы, находящиеся в сгенерерированных ранее страницах. Первая страница появляется по запросу имени сайта.

Запросы определяются исходя из структуры сайта. Структура сайта связана со структурой каталогов, в которых находятся файлы, относящиеся к рубрике соответсвующей каталогу.

Любая страница динамического сайта это красивое оформление (дизайн) и содержание в этом оформлении. Содержание располагается в дизайне в своих областях по смыслу раскиданных на странице. В итоге, страница это дизайн и области вывода любой информации.

В области дизайна выводится различная по типу информация. Их можно классифицировать так: информация для чтения, управляющая информация и информация для ввода новой информации.

Информация для чтения это тексты, картинки и т. п., короче то, за чем пришел на сайт посетитель. Она по большей части неактивна, хотя в ней могут попадаться перекрестные ссылки.

Управляющая информация это всякого рода специфичные ссылки (например, меню). Они образуют, собственно, систему навигации по сайту.

Информация для ввода новой информации это формы, предназначение которых — сбор новой информации.

Информацию для чтения в своем большинстве можно представить как список однотипных записей, то есть в виде таблицы. И таким образом, появляется задача оформления каждой записи в отдельности и таблицы в целом. В этом случае в область вывода попадает код оформления таблицы вместе с оформленными записями. Для каждой записи выводится управляющая информация, а именно ссылки для редактирования и удаления (возможно и еще какие-то вспомогательные ссылки). А в конце (или в начале) таблицы выводит ссылка для добавления новой записи. Это, так сказать, по-минимуму. Все дополнительные управляющие ссылки добавляются в зависимости от решаемой задачи.

Естественно, что при нажатии на одну из управляющих ссылок в примитивном случае выводится та же самая страница, но в области вывода (уже и ввода) выводится соответствующая информация (например, при нажатии ссылки добавления записи выводится форма добавления записи).

Оформлением дизайна страницы занимается шаблон дизайн. А оформлением записей и таблицы в каждой области занимаются шаблоны ввода/вывода информации. Шаблоны в/в также занимаются вводом данных, удалением и обновлением, а также всякими другими операциями над данными, специфичными для разных сайтов. Отсюда вывод, что при использовании двигателя все программирование заключается в программировании специфичных шаблонов в/в. Причем можно использовать уже готовые шаблоны (возможно немного их модифицировав).

Далее встает вопрос: а зачем, собственно, посетителю ссылки с возможностью добавления и прочих манипуляций данных? Решается эта проблема посредством подсистемы прав доступа.

Изначально для двигателя существуют два рода пользователей: посетители сайта и владелец сайта. То есть, если авторизации не было и кто-то осуществил запрос анонимно, то двигатель его определяет как обычного посетителя (гостя). И соответственно, для ссылок манипуляции данными можно поставить запреты для гостей. В итоге, двигатель сгенерирует страницы без возможности что либо в них менять. А для владельца (для этого нужно пройти авторизацию, чтобы двигатель понял кто перед ним) страницы будут с этими ссылками. Кстати, о системе доступа я расскажу аж в нескольких выпусках.

Эту подсистему доступа можно использовать для ограничения доступа к разделам, к таблицам, к пунктам меню, к отдельным записям, к определенным операциям и пр.

Структурой сайта занимается специальное приложение двигателя Рубрикатор. Он создает таблицу, в которой описывается структура сайта. И создает каталоги (их структура соответствует структуре сайта). Каждый каталог принадлежит своей рубрике. В каталогах хранятся файлы для своей рубрике (например, это могут быть картинки для статьи в этой рубрике). Управлением файлов занимается Рубрикатор.

Шаблон дизайна

Страница представляет из себя шаблон дизайна со множеством областей ввода/вывода информации. Шаблон дизайна это html-код со специальными маркерами, обозначающими области ввода/вывода. При обработке шаблона дизайна выводится весь html-код, а маркеры областей заменяются на определенное информационное содержание.

В шаблоне дизайна можно определить вызовы различных функций движка. В частности, можно вызывать методы рубрики, уровня и навигации. Дополнительно шаблон дизайна определяет шаблоны вывода навигации.

Шаблон ввода/вывода информации

Любая конкретная информация вводится, обновляется и выводиться через специальные шаблоны. Для шаблона ввода/вывода любая информация представляется из себя список записей с любым количеством разнотипных полей. Такой список оформляется шаблоном по принципу: сначала что-то выводиться перед списком (это называется префиксом), потом выводяться записи, между записями выводятся разделители и что-то выводиться после списка (суффикс). Таким образом, шаблон представляет из себя: коды префикса, суффикса и разделителя и код оформления записи.

Для ввода и обновления информации существуют следующие параметры шаблона ввода/вывода: формы ввода и обновления записей; коды-условия, исполняемые перед вводом, обновлением и удалением и определяющие возможность осуществления соответствующей операции; коды, исполняемые после ввода, обновления и удаления записей.

Также в шаблоне ввода/вывода определены дополнительные параметры: количество записей, одновременно выводимых на странице; фильтр записей; сортировка по разным полям; выводить записи только для текущей рубрики или все записи.

Шаблоны могут быть двух типов: выводящие данные и исполняющие код. Шаблоны первого типа связаны с источниками данных и занимаются вводом/вывода данных. Шаблоны второго типа выполняют специальный код, определенный в шаблоне (такой тип шаблонов необходим для создания нестандартной функциональности, но при этом создавать отдельный модуль нецелесообразно). Шаблоны исполняющие код по сути занимаются только выводом информации (результатов исполнения кода).

Картинки

На этом все. Как обещал, даю картинки:

Модульная модель движка
http://suhrob.spb.ru/subscribe/images/img1.gif

Обработка запроса на запись
http://suhrob.spb.ru/subscribe/images/img1.gif

Обработка запроса на чтение рубрики (развернутая схема)
http://suhrob.spb.ru/subscribe/images/img2.gif

Обработка запроса на чтение рубрики
http://suhrob.spb.ru/subscribe/images/img3.gif

Общая модель движка
http://suhrob.spb.ru/subscribe/images/img4.gif

Шаблоны ввода-вывода
http://suhrob.spb.ru/subscribe/images/img5.gif

В следующем номере:

Далее я опишу из каких подсистем может состоять универсальный двигатель сайтов. Также будет спецвыпуск «XML-мастерская: рубрикатор».

На сим прощаюсь.
Сухроб.

«На пути создания Х-двигателя сайтов»

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться

В избранное