xrb
Новичок
Организация взаимодействия с базой данных
Предлагаю обсудить подходы к взаимодействию с базой данных.
Начну с того, что писать запросы прямо в коде своих скриптов не дело – это очевидно.
Поэтому надо выносить их в отдельный модуль, так что бы они все были в одном месте, и их легко можно было обновлять и добавлять.
Еще, было бы не плохо, что бы за взаимодействие с базой отвечал отдельный класс.
Самое простое решение, которое первое приходит на ум в данной ситуации – выносим класс взаимодействия с базой (назовем его DataBase) в отдельный файл, а запросы реализуем в виде методов класса.
Все вроде бы хорошо, но проблему совершенно не решает. Если проект большой, то файл разрастается на несколько тысяч строк и что то в нем править...
Предлагаю рассмотреть следующее решение:
DataBase имеет конструктор, который отвечает за соединение с БД, какие то еще вспомогательные методы (в умеренном количестве) и метод
call($MethodType,$MethodName,&$params)
Предполагается, что все запросы хранятся в отдельной папке “queryes” каждый запрос в отдельном файле с именем methodtype.methodname.php и оформлен там в виде функции вида methodtype_methodname(&$params,&$DB)
Таким образом работа call сводится к тому, что бы подгрузить файл с запросом, вызвать соответствующую функцию и передать ей параметры.
methodtype введено для удобства. Может принимать значения 'insert', 'update' и т.п.
Что бы каждый раз не создавать массивы перед вызовом call из скриптов можно дополнить метод call еще одним
В последнем случае параметры можно будет перечислять через запятую, однако в самой вызываемой функции в этом случае необходимо учитывать что массив params не ассоциативный.
Буду рад услышать ваши замечания.
Предлагаю обсудить подходы к взаимодействию с базой данных.
Начну с того, что писать запросы прямо в коде своих скриптов не дело – это очевидно.
Поэтому надо выносить их в отдельный модуль, так что бы они все были в одном месте, и их легко можно было обновлять и добавлять.
Еще, было бы не плохо, что бы за взаимодействие с базой отвечал отдельный класс.
Самое простое решение, которое первое приходит на ум в данной ситуации – выносим класс взаимодействия с базой (назовем его DataBase) в отдельный файл, а запросы реализуем в виде методов класса.
Все вроде бы хорошо, но проблему совершенно не решает. Если проект большой, то файл разрастается на несколько тысяч строк и что то в нем править...
Предлагаю рассмотреть следующее решение:
DataBase имеет конструктор, который отвечает за соединение с БД, какие то еще вспомогательные методы (в умеренном количестве) и метод
call($MethodType,$MethodName,&$params)
PHP:
# Основной метод вызова запросов
function call($MethodType,$MethodName,&$params)
{
require_once $this->classpath."queryes/$MethodType.$MethodName.php";
return call_user_func($MethodType.'_'.$MethodName, $params,$this);
}
Таким образом работа call сводится к тому, что бы подгрузить файл с запросом, вызвать соответствующую функцию и передать ей параметры.
methodtype введено для удобства. Может принимать значения 'insert', 'update' и т.п.
Что бы каждый раз не создавать массивы перед вызовом call из скриптов можно дополнить метод call еще одним
PHP:
# метод вызова запросов с параметрами в самом методе (без использования массива в аргументе)
function pcall($MethodType,$MethodName)
{
if(func_num_args() > 2 )
{
$params = func_get_args();
array_shift($params);
array_shift($params);
}
else
$params = Array();
return $this->call($MethodType,$MethodName,$params);
}
Буду рад услышать ваши замечания.