Мой абстрактный класс требует от каждого дочернего класса массив, содержащий все имена столбцов его таблицы. Я могу получить это программно с помощью запроса к базе данных:
Код: Выделить всё
$stmt = $db->prepare("
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = '" . static::TABLE_NAME . "'
AND TABLE_SCHEMA = 'default_db'
AND generation_expression = ''
AND column_name != 'old_id'
");
$stmt->execute();
Моей реакцией на это было жесткое кодирование: :COLUMNS как константа класса в каждом дочернем классе, как показано ниже:
Код: Выделить всё
Class Address extends Dataset {
const TABLE_NAME = 'addresses';
const PRIMARY_KEY = 'address_id';
const COLUMNS = array(
'address_id',
'line1',
'line2',
'city',
'state',
'zip',
'zip4',
);
// other class methods
}
Однако проблемы с этим продолжали меня глодать, пока я не рассмотрел статический метод в абстрактном классе как решение. Итак, теперь у меня есть общедоступная статическая функция get_columns(), которая возвращает результаты того же старого запроса PDO.
Проблема в том, что добавленных запросов к базе данных достаточно, чтобы сделать мой сайт скорость загрузки МЕДЛЕННАЯ. Мой первый метод загружал насыщенные информацией страницы менее чем за 1 секунду; этот новый метод занимает 5–10 операций.
Как лучше всего минимизировать использование памяти, запросы к базе данных и лишний код, достигая при этом того же результата?
Подробнее здесь: https://stackoverflow.com/questions/793 ... r-requests
Мобильная версия