Веб-приложения

Построение произвольного веб-приложения "с нуля" (используя повторно-используемый код SKY) выполняется следующим образом: в обнову берется код SKY null-site, представляющий "пустой сайт" и развивается с помощью инструментов SKY. и конечно прямым программированием человеком. SKY null-site (код первого и второго крыла) построен преследуя цели: обеспечить максимальное удобство для программиста, который выполняет прямое программирование, а также максимально обеспечить необходимость в коде для решения всех основных вопросов, которые имеются при построении вебсайтов, но НЕ нести при этом избыточный код, который мог бы уменьшать производительность системы, быть большого размера, мог бы путать программиста. На основе такой заготовки, можно построить около 80% сайтов в данный момент присутствующих в Интернете, которые при этом бы имели тот же успех что они и имеют, но которые были бы проще и производительнее, запрограммированы быстрее, если бы использовали код SKY. в своей основе. Для оставшихся 20% сайтов, используются облачные модификации кода первого и второго крыла, которые выполняются инструментами SKY.

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

  1. Отделение административного раздела от Frontend потенциально понижает риск несанкционированного доступа к нему (взлома)
  2. Для кода админки, не требуется специальная работа над его дизайном и его дизайн может быть единым для любого сайта
  3. Имеется возможность почти «комплектовать» админку необходимым повторно используемым кодом, что сводит к минимуму ее программирование

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

Точки входа

Точки входа в SKY. это глобально функционально разные последовательности выполнения кода. Основные это: index, admin и cron, а название текущей точки входа, всегда определено в константе START. В приложениях могут быть и другие, например xml, которая определяет течение скрипта «отдающего» XML данные от сайта, однако 3 вышеописанные точки основные и практически всегда используются. Запросы ajax в SKY. не выделяются отдельной точкой входа, т.к. ajax запросы могут быть и в админке и на Frontend, т.е. является логически сопряженным понятием.

Конфигурационный файл в веб-приложениях SKY.

Приложения SKY. всегда разрабатываются на локальной рабочей станции программистов и практически любое SKY. приложение поддерживает уникальность выполнения кода на ПК программиста и на "продакшн", т.е. имеется константа DEV, используя которую, можно делать ответвления в работе кода на продакшн и при разработке приложения. Например в конфигурационном файле указывается сразу 2 доступа к БД "продакшн" и ПК разработчика. Конечно, если проектом занимается не один программист, а больше одного, то этот простой подход требует коррекции, но уникальная настройка инсталляции приложения на ПК программистов и на "продакшн", в SKY. не рекомендуется. Копирование всех файлов кода приложения (включая конфигурационный), не должно выводить сайт на "продакшн" из строя, несмотря на то, что вы можете использовать системы контроля версий типа GIT или SVN и умеете избегать вышеописанные проблемы с их помощью. Второй пример использовании константы DEV: на локальном ПК, можно отключить внешние счетчики кликов или рекламные баннеры или подменять удаленные статические файлы локальными, для более быстрой работы и удобства отладки.

В SKY. приложениях всегда имеется "primary" конфигурационый файл `main/conf.php`, в котором выполняется первичная конфигурация: настройка констант DEV, DEBUG и подключение к БД. Константа DEBUG включает отладочный режим работы приложения. Константа DEV может быть определена так (если у вас рабочий ПК Windows, а сервер Unix-подобная система):

define('DEV', PHP_OS == 'WINNT');

Константа PATH определяет положения корня приложения относительно корня веб-сервера, если приложение находится в корне вебсервера, имеет значение / и определяется для продакшн и для локальной инсталляции раздельно, например так: define('PATH', DEV ? '/forum/' : '/');

Константа START, определяется в самой верхней части файла, на который отдается выполнение кода веб-сервером (это обычно index.php). Первичный (primary) конфигурационный файл, имеет минимум настроек и они затрагивают в основном инсталляционные ньюансы. Основная масса конфигурационных настроек в SKY., хранится в БД.

Структура дирректорий и размещение файлов

Чистый null-site SKY. (не облачная модификация) имеет следующую структуру дирректорий, которая распологается в корне веб-сервера:

admin
main
pub
view

При необходимости могут быть добавлены также дирректории class, cache, label и другие. Подразумевается что все дирректории кроме корня веб-сайта и pub закрыты для веб. Несмотря на то что в некоторых framework рекомендуется распологать такие дирректории выше корня вебсервера, в SKY это не рекомендуется, кроме сайтов, к которым имеется повышеное требование к безопасности, таких веб-сайтов на данный момент имеется около 10% в интернете и в основном это сайты имеющие отношение к финансовым (или другим важным) операциям, либо же имеющие посещаемость более 100000 человек в день. В этом случае необходимо использовать облачную модификацию null-site.

В SKY. (для всех публичных приложений) требуется строить код приложений так, чтобы их можно было размещать в корне вебсервера или подпапке (без разницы), например в корне вебсайта распологается код основного сайта, а в папке forum - FORUM.SKY.

В дирректории `admin` хранятся файлы админки, в `main` основные файлы, код первого и второго крыла. Папка `pub` хранит изображения, файлы стилей и javascript файлов, включая открытые библиотеки. Папка `view` содержит "view" php файлы, но если скрипт веб-приложения имеет несколько стилей фронт-вида сайта, то "view" файлы распологаются в папках конкретного стиля, например view/default или view/seesun, а статические файлы соответственно в pub/default или pub/seesun. Второстепенные файлы "view" не долны начинаться с символа подчеркивание, например view/header.php. Файлы "view" центрального тела страниц, должны начинаться с подчеркивания, например view/_news.php и код файла должен начинаться с такой строки: <?php eval($me) or die ?>. Кстати, все остальные файлы скрипта php, которые не являются началом выполнения скрипта (в которых определяется константа START), должны предваряться кодом: <?php defined('START') or die;

Вообще инструкция php "die" имеет синоним "exit", и в SKY. первый вариант используется для крышевания, а второй для корректного завершения скрипта.

На "продакшн" никогда не должны присутствовать дирректории, начинающиеся с символа подчеркивания, но на локальной станции разработчика могут быть дирректории _arch - для хранения документации к проекту и прочих файлов, _loc - специальные скрипты для разработки основного приложения, _dev - дирректория приложения DEV.SKY.

Файлы "view" (относятся только для front части веб-приложения) содержат HTML код верстки с малым, очень простым кодом php. Основная обработка практически всех запросов на сервер, производится в файле main/body.php или, если обработка содержит много кода, из этого файла, управление передается на файлы main/b_page_type.php, где `page_type` - страница запроса. Ajax запросы выполняются в файле main/ajax.php или main/a_ajax_page.php, где `ajax_page` - страница ajax запроса. В файлах "view" допускается внутри HTML кода организовывать циклы не более сложного вида, чем с помощью кода: <?php for(;eval(fetch);): ?>, (см. определение константы `fetch` в файле main/sky.php, более сложная обработка должна производиться в файлах папки `main`. В очень функционально сложных приложениях, в SKY. имеется возможность использовать MVC шаблон программирования, однако для большинства веб-приложений, использовать его не рекомендуется. В случае облачной модификации null-site для MVC, код обработчика дополнительно разделяется на контроллеры и модели, а файлы распологаются соответсвенно схеме: main/mvc/с_page_type.php, где `page_type` - страница запроса и соответственно в main/mvc/m_some_table.php, где `some_table` - имя таблицы БД.

Файлы страниц админки (не имеют специальных "view"), начинаются также как и файлы "view" с подчеркивания, но распологаются в admin/_page_type.php. Простой дизайн страниц админки, а также специальный код второго крыла main/wings.php исключают необходимость в файлах "view". Иногда может потребоваться вынести часть кода из таких файлов в специальные файлы, например admin/special_code.php, это допускается. Такие файлы не должны начинаться с подчеркивания.

Файлы классов (повторно используемый код третьего крыла), при необходимости распологаются в папе `class`, например class/remote.class, файлы не начинаются с символа подчеркивания и имеют расширение .class. Файлы меток распологаются в папке `label` - например label/comments.php. Файлы жесткого кеширования в папке `cache`, например cache/part1.html. Метки и жесткое кеширование это функционал SKY. фронтальной части сайтов, который предоставляется в файле main/front.php. Метки это части HTML или php файлы, генерирующие части HTML кода (фрагменты HTML страницы), которые вставляются в HTML автоматически с помошью инструкций %HTML_NEWS% или %PHP_NEWS%, определенных на уровне HTML кода (родительского), имеют рекурсию. Жесткий кеш - это функционал позволяющий отключать (кешировать php код, включая SQL запросы на время жизни кеша), как правило определенный в метках PHP_ типа. Например такой код в файле "view": <?cache_begin('part1')?>%PHP_NEWS%<?cache_end()?> выполнит php код метки один раз за время жизни кеша. Последующие запросы на страницу, после генерации кеш-файла в папку cache, не будут грузить сервер выполнением кода определенного в метке, но будет использоваться готовый результат сгенерированной части HTML из папки cache. Если в проекте необходимо размещать кеш-файлы другого типа, в папке cache создается подпапка с именем типа кеша.

Типы крышевания

Крышевание бывает двух типов: с выходом из скрипта и без выхода. Например имеется запрос:

$q = sql("select * from article where id=$PVAL");

Можно было бы сделать крышевания используя инструкцию die; или без нее... Вот пример реализации обоих вариантов:

is_numeric($PVAL) or '' === $PVAL or die; $PVAL or $PVAL = 1; # variant 1

$PVAL = $PVAL ? intval($PVAL) : 1; # variant 2

В SKY. требуется использовать тот вариант крышевания, который требует меньше кода PHP. Обратите внимание: в приведенных выше примерах, крышевание совмещено с кодом выбора статьи по умолчанию.

Типы страниц

Страницы веб-приложений бывают таких типов: list, show, edit, add и комбинированные. Типы соответствуют операциям над данными в БД - select, update, insert. Например тип этой страницы - `show`, для центральной части тела страницы. В левой колонке, список новостей соответствует типу `list`. Т.е. В целом тип - комбинированный, однако часто архитектура приложения такова, что левая и правая колонка большинства страниц не уникальна, имеется общий код для генерации крайних колонок, а значит относительно файла `view`, который представляет центральное тело страницы, эта страница "чистый show-article"... Однако, если под текстом статьи есть листинг комментариев - страница комбинированная. Заметим, что в админ-разделе комбинированные страницы встречаются реже. Такая формальная типизация страниц, позволяет создать специальную утилиту "Visual SKY.", как часть функционала приложения DEV.SKY., с помощью которой производится быстрая генерация каркаса нового приложения на основе визуального проектирования. Без использования программирования, за довольно малое время, имеется возможность сгенерировать файлы админки и фронтальной части сайта с уникальной архитектурой, которые, во первых, будут сразу же после генерации работоспособны, во вторых не будут иметь избыточного кода и в третьих как и все приложения SKY. будут чрезвычайно производительны и просты. После проектирования утилитой "Visual SKY.", развитие приложения может происходить обычным образом - коррекцией файлов программистами. Типизация страниц, также позволяет формализовать предоставление доступа к частям страницы или частям сайта (ACL).

Крылья SKY.

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

В настоящее время в SKY, для написания javascript используется jQuery. Этот фреймворк, достаточно хорошо кристаллизирован, однако в SKY. ведется разработка более кристального javascript framework - jSKY.