Thể loại: Symfony

Bắt đầu Symfony DI (Dependency Injection) nhanh chóng Hướng dẫn

, Thứ Bảy 14 Tháng 8 2010 14:21

Dependency Injection (DI)?

Tiêm phụ thuộc là một kỹ thuật cho phép cho các đối tượng lỏng trong một ứng dụng phần mềm. Nói chung nếu một đối tượng yêu cầu truy cập các chức năng khác sẽ được khởi tạo nội bộ hàng đầu cho các hệ thống chặt chẽ. Bằng cách thực hiện tiêm phụ thuộc, chúng ta tiêm các đối tượng cần thiết sẵn sàng sử dụng (đôi khi cũng được gọi để đảo ngược của kiểm soát - IOC). Lấy ví dụ sau:

  <? Php
 lớp DecisionMaker {
     chức năng công cộng makeDecision (mảng $ tham số) {
         / / Cần các bộ chuyển đổi cơ sở dữ liệu
         $ Dp = new DecisionParameters ();
         $ ParameterScore = $ dp-> getScore (tham số);
         / * ...  Một số chi tiết quyết định logic ...  * /
         trở lại ($ parameterScore> 50);
     }
 } 

Đoạn mã này được cho là hợp chặt chẽ với các đối tượng DecisionParameters. Viết lại một cách lỏng lẻo cùng chúng tôi muốn có một cái gì đó giống như ....

  <? Php
 lớp DecisionMaker {
     tin $ _dp;
     công chức năng __construct ($ dp)
         $ This-> _dp = $ dp;
     }
     chức năng công cộng makeDecision (mảng $ tham số) {
         $ ParameterScore = $ this-> _dp-> getScore (tham số);
         / * ...  Một số chi tiết quyết định logic ...  * /
         trở lại ($ parameterScore> 50);
     }
 } 

Trong khi đạt được những lợi ích của mã lỏng chúng ta thêm phức tạp như vậy mỗi lần một đối tượng được khởi tạo chúng ta cũng phải khởi tạo phụ thuộc của nó và vượt qua những quá. Ví dụ, điều này:

  $ Sự lựa chọn = new DecisionMaker ();
 echo $ sự lựa chọn-> makeDecision (array ('nỗ lực' => 'thấp', 'trở về' => 'cao')); 

lúc này là:

  $ Dp = new DecisionParameters ();
 $ Sự lựa chọn = new DecisionMaker ($ dp);
 echo $ sự lựa chọn-> makeDecision (array ('nỗ lực' => 'thấp', 'trở về' => 'cao')); 

Tình trạng này trở nên đau đớn hơn khi số lượng phụ thuộc cho một lớp học được tăng lên, và điều gì sẽ xảy ra nếu các phụ thuộc mình có phụ thuộc? Điều này khá nhanh chóng có thể trở thành một cơn ác mộng đối tượng quản lý! Nhập container tiêm phụ thuộc (hoặc khung) ...
Tiếp tục đọc 'Symfony bắt đầu nhanh DI (Dependency Injection) Hướng dẫn' »













Panorama Theme theo Themocracy

10 khách trực tuyến
8 khách, 2 chương trình, 0 thành viên
Max du khách hôm nay: 19 lúc 12:46 am UTC
Tháng này: 19 19-08-2011 06:09 am UTC
Năm nay: 130 28-03-2011 10:40 pm UTC
Tất cả thời gian: 130 28-03-2011 10:40 pm UTC