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