Какой путь лучше для обработчика БД?


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

Первый:

class ActiveModel {
    protected $db;

    public function __construct() {
        $this->db = DbFactory::get('Foo');
    }

    public function save() {
        //use $this->db to do the job;
        ....
    }
}

Во-вторых:

class ActiveModel {

    public function save($db = null) {
        if ($db === null) {
            $db = DbFactory::get('Foo');
        }
        //then use $db to do the job;
        ....
    }
}


528
2
задан 15 сентября 2011 в 02:09 Источник Поделиться
Комментарии
1 ответ

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

public function __construct($db) {
$this->db = $db;
}

4
ответ дан 15 сентября 2011 в 02:09 Источник Поделиться