MYSF

Smallsoft programming style and mysf framework

Стиль программирования Smallsoft и фреймворк mysf




TODO: Скачать
mysf_hello_world.zip

TODO: Скачать
mysf.zip (DB)

TODO: Скачать
mysf.php

Введение в mysf

Здесь рассказывается о стиле программирования smallsoft и о фреймворк mysf. mysf это принципиально новый, нестандартный подход к созданию веб-приложений. Для сопровождения приложений написанных в этом стиле практически не требуется изучения mysf, кроме общего ознакомления с идеологией и некоторой малой части кода. Однако приложения написанные в этом стиле могут оказаться гораздо производительнее приложений собранных на Drupal например или другом фреймворк. mysf приложения более гибки и просты при решении задач расширения функционала веб-приложения. Стандартные, известные библиотеки php или javascript не используются.

Принципиальное новое начнем вот с чего: действительно ли главная раскладка сайта (main layout) не может присутствовать в index.php? Для справки: во всех стандартных подходах, главная раскладка сайта НЕ присутствует в index.php. Мы говорим - может, и mysf использует main layout в index.php! Сразу уточню, для mysf не является жестким правилом положение главной раскладки в index.php, тем не менее хочу заметить что 99% сайтов в Интернете, могли бы содержать главную раскладку в index.php и при этом они бы только выиграли в простоте сопровождения, эффективности в плане малого использования ресурсов сервера, если бы были написаны в стиле программирования smallsoft.

Итак, следующие составляющие обычно нужны при разработке и сопровождении веб-приложений: набор готового функционала (кода) для быстрого построения приложения, отладочный вывод, трассировка, способность изменять тип БД (mysql, oracle, postgreSql или другие), скрипт для создания БД приложения, уникальный дизайн (тема), уникальный код php или как минимум уникальная настройка стандартного кода (например в случае с Drupal), знание того фреймворк на котором написано приложение.

Отличительная особенность mysf в том, что приложения написанные в стиле smallsoft очень просты, время на изучения кода не требуется, при разработке приложения программист четко понимает core часть кода фреймворк и модифицирует ее! В других фреймворк, программисты-пользователи фреймворк, обычно не меняют часть core кода и эту часть кода меняет только разработчик, выпуская новые версии, которые потом доступны для обновления.

Давайте здесь далее обговорим какие проблемы и задачи стоят при построении веб-приложения с нуля в деталях. Мы разместили главную раскладку в index.php, но перед выводом в браузер, в общем случае должен отработать обработчик (чтение или запись неких данных в БД например и т.д.), должен сработать роутер, который "подключит" необходимый php код (или class) для работы с конкретной страницей сайта: В mysf в работающем приложении начало файла index.php обычно выполняется так:

<?php define('START', 'index'); require 'all.php' ?><html...

Мы определяем константу START, ее имя традиционно и ее значение определяет "точку входа". Эта константа имеет двойное назначение, во-первых, значение точки входа может использоваться в коде для ветвления алгоритмов в других файлах которые включены в index.php или в других файлах-точках входа в том числе рекурсивно, во-вторых в файлах, которые НЕ являются "точками входа" в начале файла обычно всегда целесообразно написать в начале файла так:

<?php defined('START') or die;

Это гарантирует предотвращение попыток произвести хакерскую атаку одним из способов. Наличие константы START в файлах является core-частью идеологии и эта константа в "точках входа" должна присутствовать всегда. Кроме точки входа 'index' могут быть например 'ajax', 'cron', 'be' и другие. 'be' - backend - точка входа не в "публичную", не в открытую часть сайта, т.е. в админку.

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

<?=$var?>

При построении большинства приложений в Интернете, в качестве "роутера" достаточно такого кода:

require "_$PAGE.php";

где $PAGE можно определить например так:

$PAGE = $_GET ? key($_GET) : 'main';
file_exists("_$PAGE.php") or $PAGE = '404';

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

eval($router_code);

где $router_code - код роутера описанный в строке. Почему так сделано? Во-первых, код динамических страниц, должны остаться в глобальной области видимости, это дает больше преимуществ, чем если бы в index.php была функция роутера, которая локализует глобальные переменные, во вторых, код роутера записывается в переменную и делается eval потому что: самым важным постулатом стиля программирования smallsoft есть такой: все должно выглядеть тривиально просто, а если бы мы включили усложненный код "роутера" прямо в index.php, этот файл уже бы выглядел не таким тривиально простым!

Рассматривая дальнейшие задачи и проблемы которые стоят при разработке приложения в стиле программирования smallsoft, мы можем выделить следующее: если мы не используем php кеш и обработчик вместе со сверстанной странице являются подобием php кеш, т.е. они являются частью исходного кода сайта и включены в некоторую главную колонку сайта, то как мы будем управлять "левой" колонкой или заполнять html тег <title>???</title> ??? В mysf это делается так: вывод в браузер блокируется с помощью функции ob_start(), помещенной в all.php и это является core частью кода и идеологии. Во всех местах, которые должны выводиться раньше, чем обработчик (помещенный прямо в код конкретной динамической страницы), мы используем метки, например, пишем для тега title так: <title>%TITLE%</title>

После работы "обработчика", мы должны запустить core функцию head(...) и выполнить замены для всех меток. Функция head(...) должна обычно всегда запускаться в центральном файле каждой конкретной страницы, после обработчика, который может например, делать запись в БД или чтение или обновление записи в БД, так как всегда на сайте нужно заполнить как минимум html тег <title>, содержимое которого определяется прямо в файле "центральной колонки" - это удобно! Но если НЕ вызвать head(...) из файла "центральной колонки", эта функция все равно будет вызвана при завершении выполнения скрипта так (с заменой меток содержимым по умолчанию):

function shutdown($link) {
    if (ob_get_level()) head();
    if (DEBUG && START != 'ajax') echo_debug();
    mysql_close($link);
}
register_shutdown_function('shutdown', ...);

Но core код mysf и механизм меток еще расширяется функцией labels(...), которая работает с метками с префиксами PHP_ или HTML_, в первом случае в метке может быть выполняемый php код, во втором статический HTML или javascript. Функция labels(...) выполняется рекурсивно, это позволяет делать "сложные вещи" просто. Например, можно в метку записать часть некоторого кода, который выводит некий блок на странице и который формируется по разным условиям, тогда вывод этого блока будет осуществляться всего лишь печатанием в stdout самой метки так:

%PHP_SOMELABEL%

Вывод метки можно делать в stdout на html участке страницы, а выполняться может php! Можно ЛЕГКО делать сложные рекурсивные схемы отображения содержимого на сайте! Метки могут храниться в БД в таблице label или в файлах в папке /label. Если в БД - разработчику сайта удобно делать online модификации (через админку), если в файлах - не выполняются "лишние" sql запросы к БД и это целесообразнее с точки зрения безопасности. Можно комбинировать и можно делать экспорт-импорт стандартными скриптами mysf, доступ к которым есть у разработчика сайта. Недостаток: механизм меток должен иметь защиту, чтобы неавторизованный посетитель сайта не активировал не санкционировано метку постингом ее кода в комментарий например. Но механизм меток имеет гораздо больше преимуществ!

Стиль программирования smallsoft - сделать сложное простым. Базовая структура каталогов также простая и естественная, мы даже не будем объяснять назначение папок, так как это очевидно. В случае, когда сайт имеет одну тему или дизайн (а чаще всего так и есть в Интернете), она такая:

/admin/
/class/
/image/
/label/
/main/
.htaccess
_404.php
_main.php
admin.php
ajax.php
all.css
all.js
conf.php
index.php
robots.txt
Читайте также в будущих статьях:
  1. Автоматическая трассировка sql запросов и другой отладочный вывод.
  2. Core функция sql() в mysf и другие sql функции замены.
  3. Стандартный код модификации и работы с суперглобальными массивами.
  4. Автозагрузка классов и идеология использования объектов в mysf.
  5. Другой core код в mysf.
  6. Рассуждения о глобальных переменных.
  7. ACL в mysf.
  8. Стандартные скрипты разработчика: поиск и использование повторно используемого кода в БД кода, обновление БД кода, генерация скелета приложения.
  9. Участие комьюнити программистов в пополнении и модификации БД повторно используемого кода в mysf.
Этот проект сейчас развивается!
Возвращайтесь чтобы получить новую информацию
© SmallSoft, 2008-2010.
Page generated in 0,017 seconds
with 4 queries