Создание сторонней библиотеки PHP, которая требует доступа к базе данных - PullRequest
2 голосов
/ 11 декабря 2010

Я создаю стороннюю библиотеку, которая требует доступа к базе данных.Чтобы быть более конкретным, это библиотека контроля доступа.В настоящее время самая большая проблема, с которой я сталкиваюсь, заключается в том, как сделать ее совместимой с большинством фреймворков и CMS?

Я мог бы выдавать запросы, используя экземпляр базы данных, указанный разработчиком.Это имеет три проблемы:

  • Мне нужен доступ к экземпляру базы данных.
  • Библиотека должна иметь возможность работать с различными экземплярами базы данных (PDO, MySQLi, mysql-resource,postgresql-resource и т. д.)
  • Не будет кэширования, поскольку запросы не проходят через приложение (при условии, что приложение использует их).

Или я мог бы просто иметьметоды, которые возвращают SQL, но разве это лучше?

Ответы [ 2 ]

1 голос
/ 11 декабря 2010

Шаблон проектирования адаптера приходит на ум

Компонент «с полки» предлагает привлекательные функциональные возможности, которые вы хотели бы использовать повторно, но его «взгляд на мир» не совместим с философией и архитектурой разрабатываемой системы.

Для вашей конкретной проблемы это означает, что вы создаете класс для вашей платформы, который предоставляет API со всеми методами, необходимыми для других ваших классов. Это единственный интерфейс, с которым вы будете взаимодействовать. Затем вы создаете адаптеры для каждой базы данных, которую хотите поддерживать. Таким образом, ваш адаптер станет медитирующим звеном между вашей структурой и DAL.

Пример:

interface DB_Interface
{
    public function somethingYourFrameworkUses();
}

class YourDB implements DB_Interface
{
    public function setAdapter(DB_Interface $adapter)
    {
        $this->adapter = $adapter;
    }
    public function somethingYourFrameworkUses()
    {
        $this->adapter->somethingYourFrameworkUses();
    }
}

Выше ваш основной класс. Вы будете взаимодействовать с этим классом только из оставшегося кода фреймворка. Функциональность, необходимая для взаимодействия с конкретной базой данных, содержится в конкретном адаптере. Вы создаете и внедряете адаптер во время выполнения.

class PDO_Adapter implements DBInterface
{
    public function somethingYourFrameworkUses()
    {
        // code to make this function work with PDO
    }
}

class MySQLi_Adapter implements DBInterface
{
    public function somethingYourFrameworkUses()
    {
        // code to make this function work with MySQLiAdapter
    }
}

Добавьте дополнительные адаптеры по своему усмотрению.

0 голосов
/ 11 декабря 2010

Вы можете построить поверх существующего уровня абстракции базы данных, такого как Zend_Db, который позволит вам написать код один раз, и он будет работать везде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...