Выложил дистибутив

Духовность™

Продвинутый новичок
HraKK
ты с глобалсами не согласен? или в обилии строк? или в обилии фактических действий в методе?
 

pilot911

Новичок
что самое главное в нашей работе программистов - это решение проблем кратчайшим путем и соразмерными затратами

можно, конечно, каждый более-менее приличный кусок функции разбивать на части и выносить в отдельную функцию

но для бэкенда (пока что) смысла делать этого нет
 

whirlwind

TDD infected, paranoid
> главное в нашей работе программистов - это решение проблем кратчайшим путем и соразмерными затратами

Боюсь, что Вы сами себя опровергаете. Иначе зачем было разрабатывать еще один велосипед? Вероятно, не для того, что бы решить проблему кратчайшим путем, а?
 

HraKK

Мудак
Команда форума
или в обилии строк? или в обилии фактических действий в методе?
-~{}~ 03.10.08 00:19:

но для бэкенда (пока что) смысла делать этого нет
у тебя все для бекенда нету смысла. И венегрет и то и все. А для чего смысл есть? Понимаешь ООП это не чо-то такое волшебное, это просто стиль мышления. И если ты им не мыслишь у тебя не будет в другом месте более ООП чем тут. Если ты им мыслишь, он у тебя оправдан и быстрее и лучше везде. А ты пишешь лишь бы написать что это ООП.
 

pilot911

Новичок
Автор оригинала: whirlwind
> главное в нашей работе программистов - это решение проблем кратчайшим путем и соразмерными затратами

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

понаблюдайте за этим сайтом - там контент на главной странице меняется каждые 3 часа


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

-~{}~ 03.10.08 01:33:

Автор оригинала: HraKK
-~{}~ 03.10.08 00:19:


у тебя все для бекенда нету смысла. И венегрет и то и все. А для чего смысл есть? Понимаешь ООП это не чо-то такое волшебное, это просто стиль мышления. И если ты им не мыслишь у тебя не будет в другом месте более ООП чем тут. Если ты им мыслишь, он у тебя оправдан и быстрее и лучше везде. А ты пишешь лишь бы написать что это ООП.
венегрет не смертелен, я сомневаюсь, что тебе понадобится переделывать бэкенд

ну если уж так приспичит - переделывай, там пара функций с хтмл
 

HraKK

Мудак
Команда форума
у тебя все для бекенда нету смысла. И венегрет и то и все. А для чего смысл есть? Понимаешь ООП это не чо-то такое волшебное, это просто стиль мышления. И если ты им не мыслишь у тебя не будет в другом месте более ООП чем тут. Если ты им мыслишь, он у тебя оправдан и быстрее и лучше везде. А ты пишешь лишь бы написать что это ООП.
у тебя все для бекенда нету смысла. И венегрет и то и все. А для чего смысл есть? Понимаешь ООП это не чо-то такое волшебное, это просто стиль мышления. И если ты им не мыслишь у тебя не будет в другом месте более ООП чем тут. Если ты им мыслишь, он у тебя оправдан и быстрее и лучше везде. А ты пишешь лишь бы написать что это ООП.
у тебя все для бекенда нету смысла. И венегрет и то и все. А для чего смысл есть? Понимаешь ООП это не чо-то такое волшебное, это просто стиль мышления. И если ты им не мыслишь у тебя не будет в другом месте более ООП чем тут. Если ты им мыслишь, он у тебя оправдан и быстрее и лучше везде. А ты пишешь лишь бы написать что это ООП.
у тебя все для бекенда нету смысла. И венегрет и то и все. А для чего смысл есть? Понимаешь ООП это не чо-то такое волшебное, это просто стиль мышления. И если ты им не мыслишь у тебя не будет в другом месте более ООП чем тут. Если ты им мыслишь, он у тебя оправдан и быстрее и лучше везде. А ты пишешь лишь бы написать что это ООП.
у тебя все для бекенда нету смысла. И венегрет и то и все. А для чего смысл есть? Понимаешь ООП это не чо-то такое волшебное, это просто стиль мышления. И если ты им не мыслишь у тебя не будет в другом месте более ООП чем тут. Если ты им мыслишь, он у тебя оправдан и быстрее и лучше везде. А ты пишешь лишь бы написать что это ООП.
 

Angerslave

Новичок
HraKK
Да лан, не возносись на облака, все мы смертные
pilot911
А ты и правда мыслишь скорее переменными, массивами и функциями, чем объектами, их методами и их взаимодействием.
А вот такой у меня каверзный вопрос: если ты заявляешь главным принципом - повышенную скорость, то какие механизмы распределения нагрузки в твоей CMS имеются?
 

HraKK

Мудак
Команда форума
Angerslave
Да я считаю себя ниже всех кто есть тут на форуме) Не поверишь. Я больше учитель чем писатель) У меня говнокод похлеще вашего)
 

pilot911

Новичок
Автор оригинала: Angerslave
HraKK
Да лан, не возносись на облака, все мы смертные
pilot911
А ты и правда мыслишь скорее переменными, массивами и функциями, чем объектами, их методами и их взаимодействием.
А вот такой у меня каверзный вопрос: если ты заявляешь главным принципом - повышенную скорость, то какие механизмы распределения нагрузки в твоей CMS имеются?
Хороший вопрос. Сейчас обосную принципы, которыми руководствовался.

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

Поэтому я создал менеджеры базы данных, action-серверов и кэша, которые руководствуются config.php для выдачи данных на коннект к этим серверам.

Типичная часть конфига для БД выглядит так:

PHP:
$GLOBALS['DB_CONFIG']	=	array(
				'1'	=>	array(
					'host'				=>	'',
					'user'				=>	'',
					'password'			=>	'',
					'database'			=>	'',
					'type'				=>	'mysql',
					'enable_insert'		=>	false,
					'enable_select'		=>	false,
				),
				'2'	=>	array(
					'host'				=>	'',
					'user'				=>	'',
					'password'			=>	'',
					'database'			=>	'',
					'type'				=>	'mysql',
					'enable_insert'		=>	false,
					'enable_select'		=>	false,
				),
				'3'	=>	array(
					'enable_insert'		=>	false,
					'enable_select'		=>	false,
				)
				//...etc
		);

То есть определяем один сервер для INSERT-UPDATE-DELETE операций ('enable_insert' => true) и несколько для SELECTов.


Выборка сервера (рандомно) происходит в менеджере БД:

PHP:
$GLOBALS['DB_CONFIG_SELECT']	=	cmf_manager_db::getConfigDB('',true);
	
# Connect to DB SELECT
$GLOBALS['DB_SELECT'] 	= 	cmf_manager_db::getDB($GLOBALS['DB_CONFIG_SELECT']);
$GLOBALS['DB_SELECT']->connectDB($GLOBALS['DB_CONFIG_SELECT']['host'], $GLOBALS['DB_CONFIG_SELECT']['user'], $GLOBALS['DB_CONFIG_SELECT']['password']);
$GLOBALS['DB_SELECT']->setUTF8();

Аналогично для кэша и action-серверов.

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


Далее.

Все урлы для роутера кэшируются в файле cache/CACHED_widget_cfg_(какой-то мд5).php.

Выглядит кэш роутера так:

PHP:
			if(false){}
			
		
						else if($GLOBALS["ROUTER"]->addRoute("1", new cmf_request_route(
							"[B]:language/main[/B]", array(
									"controller" 	=> 	$GLOBALS["CONFIG_CONTROLLER"]["controller_index_main"]["controller"], 
									"subcontroller" => 	$GLOBALS["CONFIG_CONTROLLER"]["controller_index_main"]["subcontroller"], 
									"function"		=>	$GLOBALS["CONFIG_CONTROLLER"]["controller_index_main"]["function"],
								), 
								$GLOBALS["CONFIG_CONTROLLER"]["controller_index_main"]["array_regexp"],
								$GLOBALS["CONFIG_CONTROLLER"]["controller_index_main"]["default_GETvar"]))) { }
						else if($GLOBALS["ROUTER"]->addRoute("2", new cmf_request_route(
							"[B]:language/registration[/B]", array(
									"controller" 	=> 	$GLOBALS["CONFIG_CONTROLLER"]["controller_index_main"]["controller"], 
									"subcontroller" => 	$GLOBALS["CONFIG_CONTROLLER"]["controller_index_main"]["subcontroller"], 
									"function"		=>	$GLOBALS["CONFIG_CONTROLLER"]["controller_index_main"]["function"],
								), 
								$GLOBALS["CONFIG_CONTROLLER"]["controller_index_main"]["array_regexp"],
								$GLOBALS["CONFIG_CONTROLLER"]["controller_index_main"]["default_GETvar"]))) { }
Если вы откроете папку cache - увидите, что все конфиги модулей, контроллеров закэшированы и при каждом запросе инклудятся лишь 5 файлов, а не 50. :)


Что еще. Да. Используется замечательный шаблонизатор blitz. Мне очень понравился.


Еще немного расскажу про кэш. Кэш имеется в моделях (кэшируются строки из БД - кэш на уровне строк), кэш имеется в виджетах (это view'еры по сути, просто наделенные функцией драг&дропа) и кэш имеется в контроллере.


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


Создал картинку, на которой это все схематически показано



Вот так.
 

Angerslave

Новичок
Ну вот, уже что-то. И такое не в каждой цмс встретишь.
А по поводу глобалсов... Обычно вместо них используют паттерн Singleton - попробуй, код сразу станет понятнее, а то сейчас в глаза только эти $GLOBALS['DB_INSERT'] и бросаются.
 

pilot911

Новичок
Автор оригинала: Angerslave
Ну вот, уже что-то. И такое не в каждой цмс встретишь.
А по поводу глобалсов... Обычно вместо них используют паттерн Singleton - попробуй, код сразу станет понятнее, а то сейчас в глаза только эти $GLOBALS['DB_INSERT'] и бросаются.
Хорошее замечание, подумаю над ним.

Синглтон использую в model, пока я вижу единственное применение.
 

Духовность™

Продвинутый новичок
А по поводу глобалсов... Обычно вместо них используют паттерн Singleton - попробуй, код сразу станет понятнее, а то сейчас в глаза только эти $GLOBALS['DB_INSERT'] и бросаются.
так получилось, я создал файл конфигурации с помощью многомерного $_CONFIG.

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

PHP:
$_CONFIG['dir'] = '......';
$_CONFIG['dir']['functions'] = '......';
$_CONFIG['dir']['classes'] = '......';
$_CONFIG['dir']['etc'] = '......';

// в методах, вместо registry и глобалсов:

$var_dir = getConfig('dir');
$var_cls = getConfig('dir', 'classes');
я во многом не прав? ведь
абстракция - есть
инкапсуляция - тоже
 

pilot911

Новичок
Автор оригинала: triumvirat
так получилось, я создал файл конфигурации с помощью многомерного $_CONFIG.

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

PHP:
$_CONFIG['dir'] = '......';
$_CONFIG['dir']['functions'] = '......';
$_CONFIG['dir']['classes'] = '......';
$_CONFIG['dir']['etc'] = '......';

// в методах, вместо registry и глобалсов:

$var_dir = getConfig('dir');
$var_cls = getConfig('dir', 'classes');
я во многом не прав? ведь
абстракция - есть
инкапсуляция - тоже
у меня так же возвращается конфиг контроллеров, виджетов

PHP:
$this->config_controller	=	cmf_loadconfigs::getConfig($this->page_data['controller_name'], 'controller');
 

whirlwind

TDD infected, paranoid
Ой, простите, не удержалсо

>Выборка сервера (рандомно) происходит в менеджере БД:

http://www.hardwareloadbalancer.com/ нервно курят в сторонке :)))

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

1. Я хочу изменить алгоритм работы менеджера БД. Как мне это сделать не меняя Ваш код?
2. Я хочу сделать импорт данных в другую базу используя классы модели. Как мне это сделать?
3. Нужно создать модель, очень похожую на модель новостей, с небольшими изменениями или даже без изменений. Можно ли использовать класс модели новости для этого?
 

pilot911

Новичок
Автор оригинала: whirlwind
Ой, простите, не удержалсо

>Выборка сервера (рандомно) происходит в менеджере БД:

http://www.hardwareloadbalancer.com/ нервно курят в сторонке :)))

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

1. Я хочу изменить алгоритм работы менеджера БД. Как мне это сделать не меняя Ваш код?
2. Я хочу сделать импорт данных в другую базу используя классы модели. Как мне это сделать?
3. Нужно создать модель, очень похожую на модель новостей, с небольшими изменениями или даже без изменений. Можно ли использовать класс модели новости для этого?
честно скажу, это не коробочный код типа мамбы, битрикса

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

и если вам необходимо изменить (не добавить) код в модель, самый простой путь не трогать ядро - просто изменить пути к файлу модели для функции __autoload()


делается добавлением 1 строчки в файл ext_autoload.php вашего модуля или контроллера


PHP:
$GLOBALS['add_class']['model_news']   =   'extensions/service/special/models/class.model_news.php';

после этого копируется файл модели в соответствующую папку и в нем изменяется поведение.


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


последнее - если необходимо добавить функцию в класс ядра - делаете так


PHP:
	cmf_loadconfigs::addClassFunction('model_fe_user', 'model_fe_user_ext', 'getMaxUsernameLength');
и после этого создаете класс
PHP:
model_fe_user_ext
c функцией
PHP:
getMaxUsernameLength()
 

HraKK

Мудак
Команда форума
После этого ты что-то говоришь о ООП :)
Тебя про наследование спрашивали, а ты про подмену файла.
 

zerkms

TDD infected
Команда форума
HraKK
если в коде есть декларация классов и инстанциация объектов - код ОО. всё просто.
 

whirlwind

TDD infected, paranoid
zerkms Если мы прикрутили деревянному ящику четыре колеса, и прибили гвоздями руль - это автомобиль? То есть, первичные поло... признаки автомобиля вроде есть, а не едет :)

ты код видел?

PHP:
class model_be_user ... {

 static	function 	getInstance() {
        if (!isset(self::$instances)) {
            self::$instances = new model_be_user();
        }
        return self::$instances;
    }

}
там инстанцирование ради инстанцирования, т.е. оно не нужно по факту, потому что инстансы никуда никогда не передаются. Соответственно манипуляции объектами нету, т.е. программа не ориентированная на объекты

pilot911 вот Вы скажите, Вы зачем обсуждаете свою CMS на форуме разрабочиков, если в ней ничего, с точки зрения разработки, беспроблемно сделать нельзя? Какого мнения Вы собственно ожидаете? Пиарьте тогда для потребителей и будет Вам счастье.
 
Сверху