F.A.Q

Зачем это, ведь ORM намного лучше?

Что лучше, ORM или native-SQL, это тема для долгих и бессмысленных холиваров. Каждый выбирает себе тот подход, что подходит ему для его задачи лучше всего. А выбрав подход, выбирает инструменты для его реализации.

goDB — инструмент для реализации «нативного» подхода. Библиотека только упрощает вставку данных в запрос и разбор результата. Над самим SQL она не делает никаких надстроек.

Если вам не нравится, как она справляется со своими задачами в выбранной нише (плейсхолдеры не те, адаптеров нет, PDO лучше MySQLi), вы всегда можете написать предложения на форум или мне на почту.

Если же вам больше нравится ORM, то это не имеет отношения к теме нашего разговора.

Зачем чистый SQL, когда $query->select('table')->cols('a', 'b')->where(array('a'=>3))->order('b') намного лучше?

По-моему это ужасно, но это моё личное и не авторитетное мнение. А всё остальное, это тема для холивара, как в предыдущем пункте, не имеющего отношения к нише, которую занимает goDB.

Абстрактный класс + адаптеры для различных типов СУБД было бы намного лучше

В goDB версий 1.x сделан упор на простоте в ущерб навороченности. Один требуемый подключения файл + один публичный класс + обратная совместимость с php_mysqli. Для большинства web-разработок хватает одного mysql.

Кроме того я считаю фантастикой рассказы о том, как люди написали крупный проект под MySQL, с использованием нативного SQL, а потом разом перенесли его на Oracle, путём только смены адаптера.

Однако, просто удобно иметь библиотеки для разных баз данных с одинаковым интерфейсом и не поддерживать параллельно их версии. Поэтому, goDB 2.0, скорее всего будет именно с адаптерами.

Зачем нужны ?t и ?c, они только снижают читабельность?

Такая запись:


$query = 'SELECT `name` FROM `users` WHERE `user_id`=3';	
			

Несомненно более читабельная, чем такая:


$query = 'SELECT ?c FROM ?t WHERE ?c=?i';
			

А вот такая уже не факт:


$query = 'SELECT '.$col.' FROM '.TABLE_PREFIX.'_'.TABLE_USERS.' WHERE `user_id`=3';
			

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

Также, если вы используете ?t только для поддержки префиксов, то используйте лучше следующую запись:


$query = 'SELECT `name` FROM {users} WHERE `user_id`=3';	
			

Чем goDB лучше, чем библиотека X?

Это описано в соответствующем разделе.

© Григорьев Олег aka vasa_c, 2006—2010