написал движок и хочу узнать ваше мнение

Effector

Новичок
написал движок и хочу узнать ваше мнение

Здравствуйте все! Я разрабатываю движок для сайта и хотел бы узнать ваше мнение на счет концепции.

Сейчас расскажу как у меня все устроено.
Есть класс kernel, который предоставляет возможность управлять модулями, библиотеками и т.п.
у класса kernel такие методы и атрибуты:

bool LoadLibrary($library)
bool LoadModule($module)
bool BootRegister($func,$priority=0,$param=false)
void Boot()
bool ShutdownRegister($func,$priority=0,$param=false)
void Shutdown()
bool isLoadedLib($Name)
bool isLoadedMdl($Name)

$lib=false;
$mdl=false;
$errors=false;

LoadLibrary($library) – Загружает библиотеку. Создает объект класса с именем $library и помещает его в ассоциативный массив $lib[$library].
Все модули могут получить доступ к библиотеки через $GLOBALS['kernel']->lib['LibraryName'], где LibraryName имя класса библиотеки.

LoadModule($module) - Загружает модуль. Создает объект класса с именем $module и помещает его в ассоциативный массив $mdl[$module].

BootRegister($func,$priority=0,$param=false) – Регистрирует функцию или метод для запуска в начале загрузки скрипта.

Boot() - Запускает по очереди зарегистрированные скрипты.

ShutdownRegister($func,$priority=0,$param=false) - Регистрирует функцию или метод для запуска в конце загрузки скрипта.

Shutdown() - Запускает зарегистрированные скрипты.

bool isLoadedLib($Name) – проверяет загружена ли библиотека.
bool isLoadedMdl($Name) – проверяет загружен ли модуль.

$errors – объект класса Errors, который перехватывает все ошибки и выводит их в нормальном виде.

Скрипт загрузки:
PHP:
<?
//Подключает конфиг ядра
include($_SERVER['DOCUMENT_ROOT'].'/conf/kernel.conf.php');

//Подключает класс ядра
include(ROOT.'/kernel/kernel.php');

//Подключает библиотеку обработки ошибок
include(ROOT.'/kernel/lib/lib.errors.php');

//Создает экземпляр ядра
$kernel=new kernel;

//Загружает пользовательские библиотеки и модули
include(ROOT.'/conf/extensions.conf.php');

//Запускает загрузочный модуль, который будет обрабатывать генерацию страницы
include(ROOT.'/kernel/loader.php');
?>
В файле 'extensions.conf.php' инклудятся все классы библиотек и модулей.

В загрузочном модуле находится вся логика скрипта. Этот файл можно переписать в зависимости от нужд. Например мы хотим подгружать определенный модуль в зависимости от параметра m, переданного через адресную строку.
Тогда загрузочный модуль будет таким:
PHP:
<? //Файл loader.php
                  //Запускаем зарегенные ф-ции
	$kernel->Boot();
	if(isset($_GET['m']))
	{
		if(!$kernel->isLoadedMdl($_GET['m']))
			if(class_exists($_GET['m']))
			{
				$kernel->LoadModule($_GET['m']);
				$m=$_GET['m'];
			}
			else
			{
				$m='index';
				$kernel->LoadModule($m);
			}
	}			
	else
	{
		$m='index';
		$kernel->LoadModule($m);
	}
	$kernel->mdl[$m]->Show();
	$kernel->Shutdown();
?>
Пример класса index, который мы открываем если ничего не передано в переменной $_GET['m']:
PHP:
<?
class index {
	public function Show()
	{
		echo "Index page";
	}
}
?>
Такими же могут быть другие модули.

Что вы думаете по поводу такой организации движка?.Чего в нем не хватает?

Еще хочу спросить про то, как лучше организовать приоритет загрузки в методе Boot().
То есть сделать несколько приоритетов, например штук 10 и забить это все в константы. А модули будут потом сами региться в зависимости от того, где им надо. Но тогда возникает вопрос: если есть модуль, который должен быть загружен самым первым и никаким другим, то как это организовать?
Таким модулем может быть класс организующий работу ModRewrite, который будет менять все ссылки на странице на статические, и соответственно при загрузке декодировать их обратно в нормальные.
 

jonjonson

Охренеть
Увидел $GLOBALS['kernel'] и всякие загрузки модулей и библиотек и решил, что не буду время тратить...
 

Effector

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

-~{}~ 16.04.07 14:42:

Таксь, действительно сложно получилось, не нужно было столько кода писать.
Ну да ладно. Тогда вопрос такой что должно уметь ядро модульной CMS?
У меня она предоставляет единый доступ к различным библиотекам, и позволяет запускать методы модулей, на различных этапах загрузки. Что еще нужно? Нужно ли как-то защищать информацию, от изменения другими модулями и т.п.
 

Krishna

Продался Java
Я, собственно, так и не уловил, какие преимущества даёт этот js движок перед размещением обычного html :)

Можно в двух словах?
 

boombick

boombick.org
Krishna
ты топиком не ошибся? :) Тут про js вроде не написано ничего...
 

jonjonson

Охренеть
Тогда вопрос такой что должно уметь ядро модульной CMS?
Effector, объясните, что означает в вашем понимании модульная CMS?

Ну а если вести речь об архитектуре программного обеспечения, то... Фронт контроллер - слышал. MVC - слышал. Ядро модульной CMS не слышал.

Делаю вывод, лучше вас никто не может знать, что должно делать ядро модульной CMS. :)

Не, конечно можно обсудить с разработчиками CMS, использующих термин kernel в своём коде, с какими реалиями веб разработки он связан. Но ИМХО это будет зависеть от частоты вызовов того или иного кода, а не каких либо конструктивных идеологий. Впрочем, объясняться это будет с пафосом именно через архитектуру приложения :)
 

Effector

Новичок
jonjonson:
Effector, объясните, что означает в вашем понимании модульная CMS?
Ну я тут немного неккоректно задал вопрос поидее.. Сейчас объясню ситуацию.

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

Вот такие мысли! Вот теперь и возникает вопрос как это все организовать? то есть что должно уметь такое ядро? ну как минимум уметь подгружать библиотеки и модули.

У меня в наработках ядро грузит библиотеки и модули, и дает единый доступ к ним. Модули могут регистрировать свои методы для выполнения на различных стадиях загрузки скрипта... Это может понадобиться, например, для того, чтобы посчитать, за сколько времени генерится страница. То есть модуль регистрирует свой метод для запуска вначале и вконце, потом выводит результат. Ну и все в таком же духе.

Какие есть мысли по этому поводу?
 

jonjonson

Охренеть
Effector, в начале хотел ответить так:
- Пилите, Шура. Пилите. Они золотые! (с) Ильф и Петров
Потом одумался... Как нас учит природа мать, всё должно быть естественным и происходить по мере востребованности. В общем, не нужно ни каких ядер и модулей изобретать. Всё на много проще. Всё что вас действительно интересует, это реюзабельный код, а не ядра и модули.

Вот совет, как писать гибкий и реюзабельный код:

1) Напиши приложение.
2) Напиши ещё одно приложение.
3) Выдели общие места и используй их, как базис для следующего приложения.
4) Повтори.

В результате получишь библиотеку, которую можно использовать для кода который пишешь ты. Можешь попробовать использовать ее в работе с твоей командой.

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

Если все это вдруг случится, то есть очень небольшой шанс, что найдется второй такой пользователь.

Реюзабельность не очень хорошая цель при написании софта и она парализует твой мозг. Лучше развивай мастерство рефакторинга.
Наблюдай за общими ошибками в коде, который у тебя есть, и ищи причины, которые эти ошибки вызывают. Это позволит тебе менять и улучшать код. Возможно стоит изучить ООП, на самом деле тебе придётся это сделать в какой-то момент, и это позволит развивать дизайн дальше. Что в свою очередь сделает изучение более результативным.
Это не я написал. Взято от сюда http://forum.agiledev.ru/index.php?t=msg&&th=678&goto=3964#msg_3964
Но я согласен с этим на 100%
Я не отказываю в возможности существования "ядра" и "модулей", но нельзя их придумать заранее. Они могут появиться как результат многих разработок ПО. Они результат, а не цель. У вас же они во главе угла. У вас нет самой функциональности и концентрации на ней, но концентрация на чём-то вторичном.
 

AmdY

Пью пиво
Команда форума
Хм. MVC здесь и не пахнет, а $kernel->LoadModule($_GET['m']) - убивает на повал.
Прежде чем изобретать свой велосипед, покопайся в уже готовых и подумай, мот ну его на...
 
Сверху