Hướng dẫn dùng php injection trong PHP
Mô hình lập trình DI - Dependency Injection
Show
Bằng cách sử dụng mô hình Dependency Injection ta dễ dàng bảo trì code, test và module hóa ứng dụng. Tất cả các project đều có các thành phần phụ thuộc vào nhau, dự án càng lớn thì càng nhiều thành phần phụ thuộc, thì cơ chế DI giúp cho quản lý các thành phần phụ thuộc này tốt nhất. Giờ bạn tạo ra 2 lớp mà chúng không sử dụng cơ chế DI, sau đó viết lại có sử dụng DI để xem sự khác biệt: Lớp thứ nhất là quantity = $quantity; $this->status = $status; } public function getQuantity(){ return $this->quantity; } public function getStatus(){ return $this->status; } } Lớp stockItem = new StockItem($stockQuantity, $stockStatus); $this->code = $code; } public function getStockItem(){ return $this->stockItem; } public function getCode(){ return $this->code; } } $product = new Product("101010", 50, "Áo Dài"); var_dump($product->getStockItem()); Code trên tạo ra lớp Với cách sử dụng code như trên, đó là đoạn code bình thường không có vấn đề gì về logic, nhiều khi đánh giá là đoạn code tốt. Tuy nhiên khi vận hành, bảo trì, mở rộng có thể phát sinh một số vấn đề:
Viết lại với Dependency InjectionTiêm vào đối tượng các thành phần phụ thuộc cần thiết: stockItem = $stockItem; $this->code = $code; } public function getStockItem(){ return $this->stockItem; } public function getCode(){ return $this->code; } } $stockItem = new StockItem(50, "Áo Dài"); $product = new Product("101010", $stockItem); var_dump($product->getStockItem()); Với cách viết thứ 2 này, đối tượng StockItem không còn khởi tạo bên trong hàm tạo Product nữa, mà nó được truyền vào (tiêm) Product thông qua chính đối tượng StockItem, như vậy khi thay đổi cách khởi tạo StockItem thì lớp Product không phải thay đổi gì. Đó chính là khái niệm Các kiểu Dependency InjectionViệc cài cắm đối tượng phụ thuộc vào một đối tượng khác được thực hiện qua mấy cách sau: Constructor Injection - Cài cắm thông qua hàm tạoỞ ví dụ trên chính là sử dụng kiểu Constructor Injection, với cách này có một số đặc điểm
Setter Injection - Cài cắm thông qua hàm setterThành phần phụ thuộc được tiêm (truyền) vào đối tượng thông qua hàm setter. Ví dụ: code = $code; } public function getStockItem(){ return $this->stockItem; } public function getCode(){ return $this->code; } public function setStockItem(StockItem $stockItem){ $this->stockItem = $stockItem; } } $stockItem = new StockItem(50, "Áo Dài"); $product = new Product("101010"); $product->setStockItem($stockItem); var_dump($product->getStockItem()); Như vậy đối tượng phụ thuộc vào
Interface Injection - Cài cắm thông qua giao diện lớpVới cách này định nghĩa một giao diện sao cho các thành phần phụ thuộc được tích hợp vào mã triển khai giao diện:
|