Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Дальнейшее развитие vu-engine  (Прочитано 103846 раз)
0 Пользователей и 1 Гость смотрят эту тему.
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #30 : 06-03-2006 11:04 » 

Цитата
Только есть одно НО: настройки лучше загрузить до загрузки модулей.
ну для понятности и надежности можно примерно так:
Код:
$core = new core__core(); // только для создания экземпляра класа.
$core->load_config();
$core->load_core_modules();
$core->load_user_modules();
$core->run();
Записан

Удачного всем кодинга! -=x[PooH]x=-
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #31 : 06-03-2006 18:03 » 

я тут подумал, что происходит смешивание понятий core и engine, поэтому ИМХО ,будет более правильно в index.php
Код:
$engine = new engine();
$engine -> set_php_config();
$engine -> init (); // в принципе можно сделать в конструкторе
$engine -> load (); // загрузка конфигурации, ядра, молулей и т.д.
$engine- > run();
где-нить в engine.php:
Код:
function init ()
{
   $core = new core();
}
function load ()
{
    $core->load_config();
    $core->load_core_modules();
    $core->load_user_modules(); // не знаю, может лучше пользовательские модули вынести из ядра в отдельный класс?
}

а может даже лучше сделать классы modules и config, и взависимости от параметров загружать различные группы модулей, например, чтобы можно было использовать так:
Код:
function load ()
{
    $core->load_config();
    $core_modules = new modules();
    $core_modules -> load_config ($core_modules_cfg_file);
    $core_modules -> load ();

    $user_modules = new modules();
    $user_modules -> load_config ($user_modules_cfg_file);
    $user_modules -> load ();
}

и если будет класс config то его можно легко использовать в функциях load_config

PS: Жду следующей версии.
PPS: Немог бы ты настроить редактор, чтобы табуляции заменялись на пробелы.

« Последнее редактирование: 06-03-2006 18:09 от PooH » Записан

Удачного всем кодинга! -=x[PooH]x=-
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #32 : 06-03-2006 21:15 » 

PooH, если тебя смущает директория engine, то это дело в конфигах переименовывается на раз - специально так сделал.

Я понимаю, что ты то же ищешь способ упростить, но некоторые вещи или не вписываются в концепцию, или имеют некоторые сложности.
Цитата
$engine -> set_php_config();
Код ядра должен меняться разработчиком, но не пользователем: апгрейд мягче пройдет. Если надо, я какие вещи перенесу в отдельный файл, хоть и не хотел этого.

Слудеющую версию выложу ближе к выходеым - праздник и все такое.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #33 : 07-03-2006 06:07 » 

Цитата
если тебя смущает директория engine
нет, просто, по-моему у нас (или у меня) смешиваются понятия Ядра и Движка, надо как-то четко их разграничить. Я так понимаю модулем DB должно заниматься (заргузка, использование) ядро, а, например, модулем news - движок.

Еще раз хочу сказать, что я никогда не сталкивался с похожими вещами, просто мысли толкаю. Принятие решений - полностью твое право. Можешь просто сказать "Фигня это!" и это будет мной воспринято без всяких обид. А если еще вкратце объяснишь почему, то вообще будет очень хорошо Улыбаюсь. Если ты не против мне хотелось бы по ходу задавать вопросы. Или это лучше обсуждать в отдельной теме? Например, мне не понятно, почему конф.файлы надо делать исполняемыми? Может и правда открыть тему: "вопросы реализации" и там обсуждать почему именно так реализовано, а не подругому (точнее это будет вопрос-ответ)?
Записан

Удачного всем кодинга! -=x[PooH]x=-
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #34 : 07-03-2006 09:47 » 

Структура директорий такая:
enigine/ - общая для всех файлов
engine/core/ - модули ядра

Цитата
Например, мне не понятно, почему конф.файлы надо делать исполняемыми?
Чтобы их нельзя было прочесть из браузера. Ну и сервисные возможности кода: вставка значения переменных.
Я думаю, пока этой темы вполне хватает.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #35 : 07-03-2006 10:11 » 

Цитата
Структура директорий такая:
я имел ввиду классы, предлагаю:
engine
core
modules
module
config

их взаимодействие

* classes.gif (2.8 Кб - загружено 1789 раз.)
« Последнее редактирование: 07-03-2006 10:15 от PooH » Записан

Удачного всем кодинга! -=x[PooH]x=-
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #36 : 07-03-2006 10:36 » 

Такая схема ведет к усложнению структуры, а что она дает кроме этого?

Я в текущей версии выделил два класса: config и core - они грузятся "вручную". Этото минимально необходимое, что не удается отрезать.
Задача первого понятна: создание единообразного интерфейса для конфигов, загрузка базового конфига.
Задача второго: интерфейс для загрузки модулей ядра, логика исполнения.


У меня есть отдельные вопросы для исследований, которые могут повлиять на логику исполнения.
Например, как долго не завершается скрипт при выводе большого объема данных в браузер?
Судя по тому, что я читал, скрипт висит до завершения последней операции (TCP буфер не учитываю).
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #37 : 07-03-2006 10:47 » 

у меня быда такая идея:
config - интервейс для работы с конф. настройками.
module - базовый класс для всех модулей (например, думаю у всех модулей будет использоваться config)
modules - загрузка, управление группой модулей. в нашем случае мы имеем как минимум две группы: ядра и пользовательских.
core - содержит модули ядра и управляет их взаимодействием.
engine - содержит core и пользовательские модули.

Записан

Удачного всем кодинга! -=x[PooH]x=-
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #38 : 08-03-2006 21:11 » 

Цитата
Немог бы ты настроить редактор, чтобы табуляции заменялись на пробелы.
Установи у себя в редакторе размер табуляции равным 8 - это стандартно. Я то же страдаю от неудобства многочисленных виндовых редакторов.

Я пользуюсь mcedit, который делает шаг в 4 позиции, но заменяет 8 пробелов (с учетом позиций) на табуляцию, а остальное заполняет пробелами. Т.е. выдает полностью правильный текст, который одинаково отображается в самом редакторе, в браузере, в любом терминале и при выводе на печать.

Выкладываю, что наваял. Работа идет медленно - приходится попутно тонкости php изучать.
Основное новое: разбор параметров GET или любого URL, перехват ошибок.
В комплекте лежит класс old - внимания обращать не надо - он не написан. Это остаток от экспериментов и заготовка для дальнейшей работы.

* vu-core-3.0.2-a10.tar.gz (9.76 Кб - загружено 1182 раз.)
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #39 : 09-03-2006 08:15 » 

я бы все-таки вынес бы HTML из кода класса, например, в config_html.php
Код:
<?php
 rerurn 
"

error_block.header = <div class=&#39;engine_error_block&#39;><b>[error]</b>: [filename]:[linenumber]<br /> <b><u>Text</u></b>: [errmsg]
error_block.backtrace.header = <br /><b><u>Backtrace</u></b>:<br />
error_block.backtrace.body = #[number]:[class_type_function] at [file]:[line]<br />
error_block.backtrace.footer =
error_block.variables = <br /><b><u>Variables</u></b>:<pre> [vars] </pre>
error_block.footer = </div>

 "
?>
а в самом классе просто делать замену.

и еще одна мелочь (можешь считать придиркой Улыбаюсь но если это менять, то лучше сразу)

foreach ($bt as $n=>$a) - по-моему лучше более развернутые  имена давать (проверено на себе - так удобней: один раз напишешь - потом сто раз прочитаешь); где-то используется filename (или linenumber) где-то просто file (или line); в одних классах для переменных используется префикс "_" в других нет. Так как "Всё временное есть самое постоянное"(С) лучше с именованием переменных сразу определиться. Например, почему используется "WARN" а не "WARNING" или не "W". По-моему, лучше использовать полные название и _ между словами. У тебя практически везде именно так. И с конфигурационными параметрами лучше определиться. Я предлагаю примерно так core\core\config.php (в нем по-моему только настройки Engine? лучше тогда в \engine\config.php (а настройки ядра выделить в \engine\core\config.php))
Код:
<?php

// использование блока { } позволяет пользоваться локальными переменными

    
$document_root = &#39;/var/www/virt/www.host1.local/www/&#39;;

    
$url_proto = &#39;http://&#39;;
    
$url_host = &#39;www.host1.local&#39;;
    
$url_path = &#39;/&#39;;
    
$url_file = &#39;index.php&#39;;

    
$ver_major 3;
    
$ver_minor 0;
    
$ver_patch 2;
    
$ver_status = &#39;a&#39;;
    
$ver_step 10;


    
$site_url $url_proto $url_host $url_path;


//    $forum_url = &#39;https://forum.shelek.ru/&#39;;

    
return "

### base paths
path_root = 
{$document_root}engine/
path_site_root = 
{$document_root}engine/

### base URLs
URL_absolute
{$site_url}
URL_relative
{$url_path}
URL_main
{$site_url}{$url_file}

### manual locking
disabled = no

### debug facilities

# debug.level
#   3 - full debugging mode
#   2 - debugging mode
#   1 - testing mode
#   0 - working mode
debug.level = 2

# debug.show_vars_level
#    2 - on error and on warning
#    1 - on error
#    0 - none
debug.show_vars_level = 1

# debug.show_backtrace_level
#    2 - on error and on warning
#    1 - on error
#    0 - none
debug.show_backtrace_level = 1

### run-time preferences
core_auto_load = yes
core_class_prefix = core__

preload_list. = db
preload_list. = url
#preload_list. = post_data
#preload_list. = session
preload_list. = main

run_list_begin. = main
#run_list_end. = 

### version data
version.full = 
{$ver_major}.{$ver_minor}.{$ver_patch}-{$ver_status}{$ver_step}
version.major = 
{$ver_major}
version.minor = 
{$ver_minor}
version.patch = 
{$ver_patch}
version.status = 
{$ver_status}
version.develstep = 
{$ver_step}

"
;

}

?>

все ИМХО.
« Последнее редактирование: 19-12-2007 21:18 от Алексей1153++ » Записан

Удачного всем кодинга! -=x[PooH]x=-
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #40 : 09-03-2006 17:26 » 

Цитата
я бы все-таки вынес бы HTML из кода класса, например, в config_html.php
Логично - подумаю, что и как можно вынести. Ведь вывод не обязательно должен быть html...

Цитата
по-моему лучше более развернутые  имена давать
Двумя руками - за. В этом месте я просто поторопился.
У php оказалось нехорошее поведение при возникновении ошибок синтаксиса: fatal error без возможности перехвата. Это меня несколько разозлило и, пока искал методы борьбы, не особо старался.

Насчет имен. Т.к. код практически весь сосредоточен в классах, а глобальных имен я использую минимум (да и для использования их нужно объявлять global или использовать $GLOBALS), то видимость имен переменных ограничена ф-ией. Из-за отсутствия в php4 контроля доступа и видимости членов класов, я использую следующее соглашение: private члены начинаются с '_'; public - с буквы; private члены, которые предназначены для специфических ф-ий - с двух '_'.

С настройками я до конца не определился.
Основная идея: если _модуль_ привносит своим кодом какой-либо функционал, то и настройки этого функционала должны принадлежать ему. Так, я предпологаю, можно изменять отдельные модули, добавлять в них функционал и соотв. им настройки не касаясь других модулей. Т.е., в принципе, апгрейд можно лекго сделать на ходу, используя только простую общую логику, а специфичную логику - только в исключительных случаях (изменения базы и т.п.).
Если какой-либо компонент системы подгрузит модуль, то ему будут доступны и его настройки, а иначе, если ему не нужен модуль, нафига ему его настройки...
Конечно, нужно хорошенько подумать и разложить все по полочкам. И с именами определиться. С одной стороны, не хочется использовать длинных имен, а с другой стороны - должен быть порядок.
Может я слишком сильно пытаюсь сделать все единообразно?
Пиши свои соображения.

Посмотри еще ф-ию core__config::proc_dir() - это архаизм от ранних вариантов. Удалять пока не тороплюсь, но применения уже не вижу.

Модуль ядра у меня на текущий момент состоит из: class.php (с классом и прочим кодом), config.php и macro.php (для различного кода вне классов). Последние два - не обязательны.

Модули config и core я не объединяю в единый блок по след. причинам:
1) чем меньше файл, тем легче с ним работать (core/class.php уже до 10кБ дорос);
2) эти классы выполняют разные ф-ии.

Я собираюсь в базовый комплект включить еще третий модуль. Он должен стать прослойкой к коду более высокого уровня. Сервисы сервисами, а надо заранее подумать и о том, что будет их использовать и какие правила для этих блоков определить.

Спасибо за критику и поддержку: +1
« Последнее редактирование: 19-12-2007 21:25 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #41 : 18-03-2006 12:45 » 

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

* vu-core-3.0.2-a12.tar.gz (10.37 Кб - загружено 1245 раз.)
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #42 : 19-03-2006 21:41 » 

Продолжение.
Немного подправил. Добавил поддержку сессии и два модуля хранения их данных.

* vu-core-3.0.2-a13.tar.gz (12.94 Кб - загружено 1205 раз.)
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #43 : 20-03-2006 17:40 » 

Ром, один не скромный вопрос. Ты хочеш вытянуть весь проект один?
Если нет, может быть я смогу подсоединится к проекту в целях своего самообучения. PHP я только чуть чуть ковырял.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #44 : 20-03-2006 20:28 » new

Finch, я только за. Один я его не вытяну, а точнее - вытяну, но затрачу на это массу времени и получится совсем не то, что я задумывал. Благо, я задумал многоуровневую систему и, в случае какого-то неудачного уровня, нижележащие уровни серьезно переписывать не придется. Я пока с самом низу.

На текущем этапе нужны критика и свежие идеи.

Я тут вспомнил, что последние две версии я выложил без перекодировки - они в koi8-r.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RomCom
Опытный

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #45 : 27-03-2006 07:45 » 

RXL, немог бы ты переконвертить файлы в win кодировку, или подскажи чем можно все скопом переконвертировать. Для меня сейчас вопрос движка очень насущен. Хотелбы присоединиться к вам.
Пока что еще только врубаюсь в уже написаный код Улыбаюсь
Записан

R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #46 : 27-03-2006 08:19 » 

Конвертором каким либо можно переделать. Там - koi8-r. Просто я пишу и отлаживаю на Linux-сервере под VMware и koi8-r - традиционная кодировка. Сейчас же вообще на utf-8 перехожу...

Или перекодируй что есть, или подожди денек и я вывешу последние результаты (в win-1251).
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #47 : 27-03-2006 08:45 » 

Вот текущее состояние. Тут много неотлаженого.

* 15.tar.gz (14.91 Кб - загружено 1211 раз.)
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines