Truyền một chuỗi kết nối đến các lớp của bạn có rất nhiều bất lợi và không có lợi. Bạn đang đi đúng hướng, nhưng bạn muốn chuyển đối tượng cơ sở dữ liệu thay vì một chuỗi kết nối.
Dependency Injection là một cách tốt để cấp cho các lớp của bạn quyền truy cập vào cơ sở dữ liệu, điều này chỉ đơn giản có nghĩa là chuyển các phụ thuộc (tức là đối tượng cơ sở dữ liệu) cho các đối tượng cần chúng, thay vì bản thân đối tượng lấy phụ thuộc từ một biến toàn cục của một loại nào đó.
Tôi khuyên bạn nên sử dụng một phương thức như setDb()
trên các lớp của bạn để chuyển các đối tượng cơ sở dữ liệu, rồi lưu trữ nó như một thuộc tính để sử dụng nội bộ.
Ví dụ:giả sử bạn đã tạo đối tượng cơ sở dữ liệu $db
trong một tập lệnh khởi tạo:
class SomeClass
{
protected $db;
public function setDb($db)
{
$this->db = $db;
}
public function something()
{
// do some query on the database using $this->db
}
}
$obj = new SomeClass();
$obj->setDb($db);
$obj->something();
DI mang lại cho bạn những lợi ích mà bạn đã đề cập:khả năng dễ dàng chuyển đổi db mà không cần phải thực hiện nhiều thao tác trong các phương pháp của bạn. Có những lợi ích khác, cụ thể là dễ kiểm tra.