«Нездоровое» использование фабричного образца? - PullRequest
0 голосов
/ 21 января 2012

Мне было интересно, является ли это «вредным» использованием заводского паттерна, или это вполне разумно:

<?php //ConnectionFactory.class.php

    /**
     * Generates prepared mysqli connection instances
     */
    class ConnectionFactory {
        public static function make(){
            $c = new mysqli('localhost', 'testusername', 'fakepassword');
            if ($c->connect_error) throw new ConnectionException("Connection failed");
            return $c;
        }
    }
    class ConnectionException extends Exception {}
?>

Или более подходящим было бы расширение класса mysqli с предварительно заполненными аргументами? Я думал об этом, но мне казалось, что это нарушает «чистоту» класса mysqli. Может быть, я слишком много думаю об этом.

Я использую много классов, которые выполняют транзакции с базой данных. Во всех примерах, которые я видел, имя пользователя / пароль / хост / и т. Д. Переписывалось при каждом использовании, что тоже не похоже на ООП.

Стоит отметить, что я действительно предпочел бы использовать Singleton, и это кажется мне идеальной возможностью для этого (когда-либо требуется только одно соединение, что, как я понимаю, значительно повысит производительность), но я пытаюсь чтобы избежать соблазна, потому что я слышал, что они считаются ООП рак.

Возможно, проблема в том, что мне не следует использовать класс mysqli во многих местах, и, возможно, я использую класс со статическими функциями 'do query' или чем-то подобным. Все мысли на эту тему очень ценятся

1 Ответ

0 голосов
/ 21 января 2012

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

Это может быть случай, когда имеет смысл использовать синглтон, поскольку для каждого процесса открыто только одно соединение.гораздо важнее, чем эзотерические рекомендации ООП.

Звучит так, как будто вы рассматриваете возможность написания тонкой абстракции БД, и хотя я думаю, что это может быть немного лучше, чем ваш код, работающий с объектом mysqli напрямую, вы должны знатьчто это хорошо изношенная территория.Если вы действительно хотите быть независимым от базы данных, не изобретайте колесо ... просто используйте PDO или какой-либо другой инструмент абстракции или отображения БД.

Хотя использование прокси-объекта mysqli вместо прямого взаимодействия с mysqli на самом деле не будетдостичь агностицизма дБ у него есть и другие преимущества.Настраиваемая регистрация запросов, проверка работоспособности SQL, логика шардинга и ряд других вещей могут появиться в вашей тонкой оболочке БД в будущем.Я говорю, напишите свой прокси-объект и создайте его экземпляр в некоторой статической переменной или где-нибудь в одиночном коде и назовите это хорошим.Нацисты ООП могут продолжать спорить о своем совершенстве, пока вы переходите к более важным вещам.

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