Ra mắt hai series mới cực hot Trí tuệ nhân tạo A đến ZPython công cụ không thể thiếu khi nghiên cứu Data science, Machine learning.

Register Pattern tạo và sử dụng danh bạ đối tượng

1. Register Pattern là gì?

Register Pattern is a well known object that other ones can use to find related objects or service.

Register Pattern là một cuốn danh bạ đối tượng dùng để tra cứu một đối tượng hoặc dịch vụ liên quan.

Register Pattern là một trong những Design pattern khá phổ biến được giới thiệu bởi Gang of Four. Áp dụng pattern này tránh việc sử dụng các biến toàn cục (global variable), sử dụng các tham chiếu đến đối tượng thông qua một công cụ duy nhất. Cách thức hoạt động giống như một cuốn danh bạ các đối tượng.

Bạn thử đặt mình vào trong một ứng dụng, các đối tượng trong đó yêu cầu quyền truy cập vào cơ sở dữ liệu, bạn hoàn toàn có thể cho từng class này kết nối riêng đến cơ sở dữ liệu. Nhưng như vậy là rất lãng phí tài nguyên, bạn cần một nơi đăng ký đối tượng kết nối và sử dụng lại khi cần. Khi áp dụng Register Pattern, một đối tượng được tạo ra giống như một cái thùng chứa (container) cho các đối tượng mà bạn muốn truy cập trong suốt ứng dụng, nó giống như việc sử dụng các biến toàn cục. Thực hiện Register Patter là vô cùng đơn giản nhưng tạo nên sức mạnh và sự thuận tiện trong ứng dụng.

2. Ví dụ về Register Pattern

Chúng ta tạo ra một class Register là một thùng chứa các tham chiếu đến đối tượng. Class này có một thuộc tính $_object là một mảng chứa các tham chiếu đến đối tượng, phương thức set() để đưa một tham chiếu đối tượng vào mảng và phương thức get() để lấy ra các tham chiếu đối tượng này.

class Registry {
    protected $_objects = array();

    function set($name, &$object) {
        $this->_objects[$name] = &$object;
    }

    function &get($name) {
        return $this->_objects[$name];
    }
}

Trong class Registry này chúng ta sử dụng & với mục đích tham chiếu, tham số thứ hai của phương thức set() là &$object là một con trỏ tham chiếu đến đối tượng $object chứ không phải truyền vào một bản sao của $object. Như vậy sẽ tiết kiệm được tài nguyên vì chúng ta chỉ tạo ra một instance và sử dụng lại. Hơn nữa mọi thay đổi lên các đối tượng này sẽ được phản ánh ở mọi nơi sử dụng chúng giống như biến toàn cục. Chúng ta sẽ sử dụng class Registry trong đoạn code tiếp theo:

// Tạo ra đối tượng kết nối database và đối tượng registry
$db = new DatabaseConnection();
$registry = new Registry();

// Đưa đối tượng $db vào danh bạ
$registry->add("database", $db);

// Sử dụng $registry
$user = new User($registry);
$admin = new Admin($registry);

// Hoặc có thể lấy đối tượng $db để thực hiện các công việc khác
$databaseObj = $registry->get("database");
$databaseObj->query("SELECT username FROM users". " WHERE id=$userId");

3. Lời kết

Register Pattern tạo nên một danh bạ đối tượng và sử dụng nó rất dễ dàng cũng như tiết kiệm tài nguyên, tuy nhiên với những vấn đề liên quan đến toàn cục, cần phải thiết kế tốt nếu không sẽ khó khăn trong việc unit testing sau này. Có một số ý kiến cho rằng Register Pattern là khá giống với Repository pattern tuy nhiên hai pattern này khác nhau ở cách lưu trữ. Nếu Register Pattern là cuốn danh bạ đối tượng (chỉ chứa các con trỏ tham chiếu) giống như index trong một table thì Repository pattern lại chứa các đối tượng thực chính là table.


CÁC BÀI VIẾT KHÁC

FirebirD

Đam mê Toán học, Lập trình. Sở thích chia sẻ kiến thức, Phim hài, Bóng đá, Cà phê sáng với bạn bè.

Giảm tối đa dung lượng ảnh với TinyPNG API trong ứng dụng Laravel

SOLID 5 nguyên lý vàng trong thiết kế hướng đối tượng

0 Bình luận trong "Register Pattern tạo và sử dụng danh bạ đối tượng"

Thêm bình luận