PHP Design Pattern - PullRequest
       8

PHP Design Pattern

1 голос
/ 13 января 2010

У меня есть класс, который выполняет операции с базой данных и возвращает результаты (массив, истина, ложь). И у меня есть другой класс, который создает строку JSON, используя этот класс в своем конструкторе. Можем ли мы сказать, что этот класс является адаптером? Или просто обертка или ...

Class Db
{
    public function getRows($params)
    {
        //...
    }
}


Class DbAdapter
{
    private $_dbh;
    public function __construct($dbh)
    {
        $this->_dbh = $dbh;
    }

    public function getJson()
    {
        return '{"key": "foo", "key2": ' . json_encode($this->_dbh->getRows($params)) . '}';
    }
}

Спасибо

Ответы [ 3 ]

1 голос
/ 13 января 2010

Я бы сказал, что это больше декоратор ... http://en.wikipedia.org/wiki/Decorator_pattern

0 голосов
/ 14 января 2010

Я не думаю, что вы можете выбрать один шаблон и сказать, что он используется здесь. Вот мой маленький список моделей, которые я вижу в вашем примере. Не стесняйтесь комментировать.

Делегирование , поскольку класс DBAdapter делегирует задачу получения фактических строк в классе DB.

Decorator , потому что класс DBAdapter украшает класс DB дополнительной функциональностью - функцией выделения результатов в JSON.

Adapter / Wrapper , если вы считаете, что он позволяет другому клиенту получать доступ к строкам вашей базы данных, которые понимают только JSON или XML или какой-либо другой формат.

Но если бы нам пришлось выбрать один, я бы сказал, Адаптер. Он принимает данные в виде структур данных PHP и преобразует их в представление JSON.

0 голосов
/ 13 января 2010

От: http://www.fluffycat.com/PHP-Design-Patterns/Adapter/

Адаптеры полезны, если вы хотите использовать класс, у которого нет именно тех методов, которые вам нужны, и вы не можете изменить класс orignal. Адаптер может взять методы, к которым у вас есть доступ в исходном классе, и адаптировать их к нужным вам методам.

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

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