Синглтон фантик


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

<?php 

    class Database {

        static function getInstance()
        {
            if (self::$instance == NULL) {
                self::$instance = new Database();
            }
            return self::$instance;
        }

        public function connect()
        {
            /*
             if dbConnection already exists, do not
             make another one.
             */
            if (is_resource($this->dbConnection))
            {
                return true;
            }

            $conn = $this->createDbConnection();
            if (!$conn){
                trigger_error("Error Connecting to Database", E_USER_NOTICE);
            }

            $this->dbConnection = $conn;
            $result = mysql_select_db($this->database_name, $conn);
            if (!$result){
                trigger_error("Error Selecting Database", E_USER_NOTICE);
            }
        }//endfunction

        public function closeConnection()
        {
            /*
             mysql documentation says closing a connection
             isn't nessesary since the connection is closed
             at the end of the script.
             */
            mysql_close($this->dbConnection);
        }

        public function executeQuery($query)
        {
            $this->query_result = mysql_query($query);
            if (!$this->query_result){
                trigger_error("Error Executing Database Query", E_USER_NOTICE);
            }
        }

        public function getRow(){
            return mysql_fetch_array($this->query_result);
        }


        private function createDbConnection()
        {

            if ($_SERVER["SERVER_NAME"] == "website.com") {
                $this->database_name = 'databasename';
                return mysql_connect('localhost', 'username', 'password');
                //$msdb = mysql_connect("localhost", "root", "");
                //mysql_select_db("test", $msdb) or die(mysql_error());
            }

        }

        private $dbConnection;
        private $query_result;
        private $database_name;
        static private $instance = NULL;
    }

?>


642
3
задан 1 ноября 2011 в 03:11 Источник Поделиться
Комментарии
1 ответ

Я собираюсь быть жестоким, может быть, вы не согласны с моей оценкой, или, возможно, это поможет вам получить работу.

Я не понимаю, почему все хотят создать одноэлементный класс базы данных. Синглтон-это зло. Теперь вы не ограничены одним объектом базы данных (мы должны все радоваться?). Интересно ваше соединение может быть удалось подключиться к различным базам данных, используя значение closeconnection и подключение (но только 1 за раз). Какой смысл в этом?

Если вы действительно должны сделать это синглтон - сделать это правильно. Остановить людей, называя конструирование, клонирование или другой из восстановить:

private function __construct();
private function __clone();
private function __wakeup();

Увидеть паттерн Singleton здесь.

Мне не импонирует ваш выбор MySQL, когда можно выбрать ПДО или, по крайней мере, в mysqli (MySQL улучшенное). ПДО на мой взгляд является лучшим, который позволяет подключаться к MySQL и базы данных тоже.

Вы жестко закодированные значения распространилась по всему коду.

Появляются свойства объекта в конце вашего класса, а не самого начала. Лично я хотел бы видеть их в самом начале, как они, как правило, используются на протяжении методы. Увидев их в начале класса у меня появилась идея объекта, который создается с помощью класса.

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

Ваш отступ не полностью совпадают. Вы используете раз в красивом стиле Allman и иметь дополнительный отступ в createDbConnection.

// endfunction не должно быть комментариев.

Предоставить комментарий для каждого метода. Если метод не достаточно даже прокомментировал это даже достойны существовать?

Для чистого PHP я бы посоветовал не конец вашего файла с ?>. Дополнительное расстояние (например, возврат каретки), после этого вызывает выход, который портит функцию заголовка.

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

5
ответ дан 8 ноября 2011 в 11:11 Источник Поделиться