По ряду причин (все из которых, в основном, сводятся к неверным управленческим решениям) мы не можем перейти на PHP5, а это означает, что нам придется поддерживать PHP4 еще несколько лет.
Поскольку многие наши приложения (как и многие веб-приложения) являются прославленными приложениями CRUD, и поскольку мне нравится брать случайный домашний проект, чтобы потратить некоторое время, я сейчас пишу небольшой ORM-подобный класс, который будет служить оболочкой для большинства основных запросов (вставка, обновление, замена, удаление, среди прочего). Поскольку он должен поддерживать PHP4, PDO
не может быть и речи, поэтому мне придется вернуться к специфичным для языка функциям, таким как mysql_query
. Поскольку мы используем несколько разных систем в разных версиях (Interbase версии 4 и выше, Firebird, MySQL), мой класс ORM / Wrapper (не знаю, как его назвать) неизбежно вырастет.
Чтобы решить эту проблему, я подумал о двух возможных «решениях»:
- Напишите один массивный класс с
switch
операторами внутри функций на основе переменной$database_system
, которая определяет используемый язык / СУБД - Напишите один базовый класс и один производный класс для каждой СУБД (возможно, для каждой версии, если функции сильно различаются между ними).
Сейчас склоняюсь ко второму варианту; на мой взгляд, это упрощает обслуживание, особенно при добавлении новой СУБД в список поддерживаемых. С другой стороны, с каждой СУБД, использующей собственный набор функций PHP, я не уверен, сколько нужно унаследовать от базового класса. Помня, что этот класс в конечном итоге будет поддерживать такие функции, как постановка в очередь, выполнение (и, возможно, фиксация, если поддерживается) сразу целого списка запросов.
В этой ситуации какой подход будет лучше всего? A или B, или, возможно, есть C, которую я еще не рассматривал? Некоторые примеры существующих классов были бы идеальными, к сожалению, большинство ORM, с которыми я столкнулся, полагаются на (только PHP5) класс PDO
.