PHP: делиться соединениями с базой данных или создавать новые? - PullRequest
0 голосов
/ 11 февраля 2012

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

Но разве совместное использование экземпляров классов - плохая привычка в PHP в целом?Что лучше из двух приведенных здесь примеров?Я на самом деле использую шаблон синглтона с первым подходом?

//semi-pseudo Code

Class DB extends mysqli{
    //
}

Class A {
    $db; //Of type Class DB, initialized in the constructor.

    //In some method

    //Should I do this, so sharing the data base connection?
    $b = new DB( $db );

    // OR

    // Should I instantiate a new instance?
    $newDb = new DB();
    $b = new B ($newDb);

}

Class B {
    $db;//Of type Class DB initialized in the constructor.

У меня есть Class DB, являющийся расширением базы данных.

У меня есть Class A с членом типа DB.

Класс A должен создать экземпляр класса B, который, в свою очередь, также имеет член типа DB.

Я использую шаблон внедрения зависимостей, поэтому A должен передавать экземпляр DBк B.

Должен ли я создать экземпляр нового экземпляра БД для передачи в B, или я могу просто передать ссылку на экземпляр БД A.

Ответы [ 2 ]

2 голосов
/ 11 февраля 2012

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

Тем не менее, Singleton хорошо подходит для доступа к базе данных. Кто-нибудь объяснил, почему это якобы плохая идея?

Основным аргументом против Синглтона является сложность тестирования, потому что вы не можете издеваться над ними с помощью юнит-тестов. Лично я стараюсь избегать фиктивных объектов в моих тестах (особенно w / PHPUnit), поэтому обычно это не имеет значения.

0 голосов
/ 11 февраля 2012

Должен ли я создать новый экземпляр БД для передачи в B, или я могу просто передать ссылку на экземпляр БД А.

Конечно, вы должны передать ссылку на экземпляр DB в класс B.

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