[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: CodX - ядро для фреймворка
Страницы: 1, 2
mustafa007
Фреймворк - программная платформа, определяющая структуру программной системы, облегчающая разработку и объединение разных компонентов большого программного проекта. Существующие популярные фреймворки, оъеденяют в себе множество встроенных библиотек, выполняющих ту или иную задачу. При необхоимости заменить одну библиотеку на другую, более знакомую разработчику, приходится плясать с бубном. Зачастую используя фреймворк, программист не использует все его возможности, ввиду их ненадобности, и как следствие за фреймворком тянется шлейф ненужного кода.
Есть исключения - микрофреймворки по типу Silex, Lumen, и т.д. однако они заточены под использование компонентов фреймворка из которого они выросли.
Я предлагаю другой подход... Использовать ядро, которое объеденит необходимые, и главное знакомые разработчику, библиотеки в один фреймворк. Обеспечить одну точку доступа к библиотекам из основного веб-приложения, при этом не создавать жестких зависимостей.
Разработаное ядро CodX имеет:
[*] Автозагрузчик скриптов
[*] Регистратор анонимных функций
[*] Регистратор свойств ядра
[*] Роутер

Разберем пункты на примерах.
Для начала необходимо создать экземпляр ядра.

$codx = new CodX();


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

$codx->project_name = 'Super site';


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

$db_type = 'mysql';
$db_host = 'localhost';
$db_user = 'test';
$db_passwd = 'test';
$db_name = 'test';
$db_charset = 'utf8';
$dsn = $db_type . ":dbname=" . $db_name . ";host=" . $db_host;
$options = array(\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'' . $db_charset . '\'');
$codx->pdo = new \PDO($dsn, $db_user, $db_passwd, $options);


Подключение библиотеки к ядру осуществляется с помощью регистратора анонимных функций. К примеру нами была написана библиотека работы с сессиями, которая удачно показала себя в работе и на наш взгляд является удобной в пользовании. Зарегистрируем её в ядре

$codx->session(function(){
return new MySession();
});


Допустим мы используем библиотеку (например FluentPDO), которая использует подключение к БД через PDO. Это подключение мы объявили раннее. Зарегистрируем эту библиотеку.

$codx->db(function () use ($codx) {
$db = new FluentPDO($codx->pdo);
return $db;
});


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

$codx->collection; // Коллекция методов ядра.
$codx->vars; // Коллекция свойств ядра.
$codx->addMethod(); // Метод регистрации анонимных функций.
$codx->autoload(); // Метод регистрации автозагрузчика.
$codx->run(); //Запуск приложения


Зачастую библиотеки имеют собственные пространства имен и собственный автозагрузчик со своими правилами подключения скриптов. И для использования библиотеки необходимо инициализировать этот загрузчик. С CodX, дабы не нарушать общий стиль программирования, можно создать правила подключения скриптов методом autoload():

$codx->autoload(function ($class) {
$base_path = __DIR__;
$file = $base_path . '/' . str_replace('\\', '/', $class) . '.php';
if (file_exists($file)) {
include_once $file;
}
}
);


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

$codx->get('/', function() use($codx){
$controller = new IndexController($codx);
$controller->indexAction();
});


Если необходимо передать параметры из строки запроса, делаем это следующим образом:

$codx->get('/user/(?P<id>[0-9])', function($params) use($codx){
$controller = new UserController($codx);
$controller->Profile($params['id']);
});


Если необходимо обработать POST, PUT, DELETE запросы, соответственно вместо метода get, пишем интересующий запрос. К примеру:

$codx->post('/news/add', function() use($codx){
$controller = new NewsController($codx);
$controller->add();
});

$codx->delete('/news/(?P<id>[0-9])', function($params) use($codx){
$controller = new NewsController($codx);
$controller->delete($params['id']);
});


После описания роутов запускаем собранное приложение:

$codx->run();


Простой пример приложения 'Привет мир!'

$codx = new CodX();

$codx->get('/', function(){
echo 'Привет мир!';
});

$codx->run();


Адрес проекта https://github.com/mustafa007/CodX
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.