Arhn - архитектура программирования

Рекомендации / информация: написание ORM для PHP4

По ряду причин (все из которых, в основном, сводятся к неверным управленческим решениям) мы не можем перейти на PHP5, а это означает, что нам придется поддерживать PHP4 еще несколько лет.

Поскольку многие наши приложения (как и многие веб-приложения) являются прославленными приложениями CRUD, и поскольку мне нравится брать случайный домашний проект, чтобы потратить некоторое время, я сейчас пишу небольшой ORM-подобный класс, который будет служить оболочкой для большинства основных запросов (вставка, обновление, замена, удаление, среди прочего). Поскольку он должен поддерживать PHP4, PDO не может быть и речи, поэтому мне придется вернуться к специфичным для языка функциям, таким как mysql_query. Поскольку мы используем несколько разных систем в разных версиях (Interbase версии 4 и выше, Firebird, MySQL), мой класс ORM / Wrapper (не знаю, как его назвать) неизбежно вырастет.

Чтобы решить эту проблему, я подумал о двух возможных «решениях»:

  • Напишите один массивный класс с switch операторами внутри функций на основе переменной $database_system, которая определяет используемый язык / СУБД
  • Напишите один базовый класс и один производный класс для каждой СУБД (возможно, для каждой версии, если функции сильно различаются между ними).

Сейчас склоняюсь ко второму варианту; на мой взгляд, это упрощает обслуживание, особенно при добавлении новой СУБД в список поддерживаемых. С другой стороны, с каждой СУБД, использующей собственный набор функций PHP, я не уверен, сколько нужно унаследовать от базового класса. Помня, что этот класс в конечном итоге будет поддерживать такие функции, как постановка в очередь, выполнение (и, возможно, фиксация, если поддерживается) сразу целого списка запросов.

В этой ситуации какой подход будет лучше всего? A или B, или, возможно, есть C, которую я еще не рассматривал? Некоторые примеры существующих классов были бы идеальными, к сожалению, большинство ORM, с которыми я столкнулся, полагаются на (только PHP5) класс PDO.

10.11.2009

Ответы:


1

Определенно выберите свой вариант 2. Ваш объектно-ориентированный подход лучше, чем массивный оператор switch. Ваш базовый класс даст вам больше, чем просто наследование общих методов. Это дает вам согласованный интерфейс, который позже можно использовать в качестве адаптера, когда вы переходите к какой-либо другой стратегии сохранения базы данных (PHP5 / PDO, когда управление приходит в себя?). Я бы даже тщательно смоделировал ваш интерфейс после PDO до такой степени, что PDO мог бы даже стать заменой для вашего собственного уровня сохраняемости, если это необходимо. Кроме того, кривая обучения для новых разработчиков проекта, изучающих ваш уровень персистентности, будет ниже, если у них уже есть опыт работы с PDO.

10.11.2009

2

Я не могу понять решение руководства использовать абсолютно неподдерживаемое программное обеспечение в качестве основы для разработки нового программного обеспечения. Для менеджера практически нулевые затраты на установку PHP 5 хотя бы параллельно. Единственным последствием PHP 4 являются более высокие затраты на разработку (существует больше классов PHP 5, чем для PHP 4, все инструменты в наши дни в основном зависят от PHP 5, и последние напоминания о PHP 4 исчезают), а производство с PHP 5 дешевле - у вас есть чтобы самостоятельно исправить ошибки в среде выполнения PHP, PHP 5.3 использует намного меньше системных ресурсов, ....)

Но если вы действительно хотите пойти по этому пути: Pear :: MDB2 должен делать то, что вам нужно, и совместим с PHP 4 и очень стабилен.

Но я бы предпочел сменить работу ... такие решения обычно не единственные глупые.

10.11.2009
  • Например, у нас есть несколько клиентов, которые запускают наше программное обеспечение на своих серверах. Они ожидают, что их версия будет обновляться, но отказываются обновлять свои серверы. Что было вполне приемлемо при подписании контракта. Это одно из «плохих решений», о которых я упомянул, так что оно не так плохо, как я могу показаться. Но временами это хлопотно. Пакет MDB2 выглядит солидно, я обязательно проверю его. Спасибо! 11.11.2009
  • У меня просто твердое мнение о PHP 5 и особенно о 5.3, и вам следует попытаться убедить своих клиентов :-) 11.11.2009
  • Если вы запустите параллельно версию PHP5, которая будет быстрее / лучше, у вас могут появиться более убедительные аргументы в пользу своих упрямых клиентов. 12.11.2009

  • 3

    Если кто-то ищет что-то похожее (я на это не надеюсь), но если - вам стоит взглянуть на xPDO.

    Это альтернатива pdo, работающему на php4. Никогда не пробовал использовать - но думаю, должно работать ... http://www.xpdo.org/

    24.05.2011
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..