Nelius
кипарис во дворе
Реализация реестра объектов в CMS, ваши мнения о плюсах и минусах данной реализации
Вот пытаюсь привести свою CMS хоть к какому-то божескому виду...
Много всего прочитал за эти не дни, в том числе и то что советовали люди в топиках форума phpclub.ru, вот родил кое-какую реализацию реестра основываясь на статье "Управление зависимостями в PHP-коде" с Agiledev.ru в которой были разобраны разные подходы к решению задачи обеспечения доступа к объектам.
Хотелось бы мнений более опытных в данном вопросе людей о минусах данной реализации и общее мнение об удобстве использования данной реализации.
Код:
Пинания за кривые решения и недопонимание основ приветствуются, тыканья носом в мануалы приветствуются вдвойне! 
P.S. Я разрабатываю OpenSource CMS и поэтому мне очень важны отзывы о том хорошо ли или неочень использовать тот или иной подход и главное удобно ли было бы Вам как разаботчикам разрабатывать дополнительные модули на основе данного решения...
Я бы мог забить на все и просто писать как хочу, мне то мой код любой понятен, но имея бооольшой опыт в изучении и правке чужого кода... мне хотелось бы уделить больше времени вопросам не только быстрой и красивой, но и удобной для разработчиков реаллизации основных функций ядра CMS.
Заранее всех благодарю за помощь.
Вот пытаюсь привести свою CMS хоть к какому-то божескому виду...
Много всего прочитал за эти не дни, в том числе и то что советовали люди в топиках форума phpclub.ru, вот родил кое-какую реализацию реестра основываясь на статье "Управление зависимостями в PHP-коде" с Agiledev.ru в которой были разобраны разные подходы к решению задачи обеспечения доступа к объектам.
Хотелось бы мнений более опытных в данном вопросе людей о минусах данной реализации и общее мнение об удобстве использования данной реализации.
Код:
PHP:
class CORE {
private static $rst = array(array());
public static function register($name,$obj) {
if (!self::is_registered($name)) { self::$rst[0][$name] = $obj; }
else { throw new Exception ('Error #001: Object with name '.$name.' was already registered'); }
}
public static function get($name) {
if (self::$rst[0][$name] !== null) { return self::$rst[0][$name]; }
else { throw new Exception ('Error #002: Object not registered'); }
}
public static function is_registered($name) { return @(self::$rst[0][$name] !== null); }
public static function save($copy=1) {
if($copy) { array_unshift(self::$rst,self::$rst[0]); }
else { array_unshift(self::$rst,array()); }
}
public static function restore() { array_shift(self::$rst); }
public static function Produce($cname,$fname='',array $construct_arg=array(),$fdir='_includes/',$req=1) { // Factory
$cname = strtolower($cname);
if ($req) {
if ($fname != '') { require_once($fdir.$fname); }
return new $cname($construct_arg);
}
else {
if ($fname != '') {
if (include_once($fdir.$fname)) { return new $cname($construct_arg); }
else { throw new Exception ('Error #003: Driver not found'); }
}
else { return new $cname($construct_arg); }
}
}
}
class Config { //Упрощенный класс для примера
public $config = array();
public function set($key,$val) { $this->config[$key] = $val; }
public function get($key) {return $this->config[$key[0]]; }
}
class DB { //Упрощенный класс для примера
...
}
class Foo { //Упрощенный класс для примера использования реестра, вариант 1
protected
$db,
$cfg;
function __construct($arg) {
$this->db = CORE::get('DB');
$this->cfg = CORE::get('CONFIG');
}
public function Bar() { return $this->db->query('SELECT * FROM something'); }
}
class NeFoo { //Упрощенный класс для примера использования реестра, вариант 2
public function NeBar() {
$db = CORE::get('DB');
$cfg = CORE::get('CONFIG');
return $db->query('SELECT * FROM something');
}
}
$cfg = CORE::Produce('Config');
CORE::register('CONFIG', $cfg);
$db = CORE::produce('DB',$cfg->get('db1,engine').'.lib.php');
CORE::register('DB', $db);
$foo = CORE::Produce('Foo');
CORE::register('FOO', $foo);
print $foo->bar();
$nefoo = CORE::Produce('NeFoo');
CORE::register('NEFOO', $nefoo);
print $nefoo->nebar();

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