Những điều không liên quan đến việc tiêm phụ thuộc

  • Post category:lập trình


Nếu bạn đang sử dụng bất kỳ khung hiện đại nào, rất có thể bạn đang phụ thuộc rất nhiều vào việc chèn phần phụ thuộc. Nhưng bạn có biết tiêm phụ thuộc là gì không? Thực ra là về — hoặc đúng hơn: nó là gì không?

# Vùng chứa phụ thuộc

Mặc dù mọi khung công tác hiện đại đều đi kèm với một hộp chứa phần phụ thuộc — một hộp lớn biết cách xây dựng các đối tượng cho bạn — nhưng điều đó không đảm bảo rằng bạn sẽ thực sự sử dụng mẫu chèn phần phụ thuộc theo cách nó phải như vậy.

thùng chứa Có thể làm cho việc đưa các phần phụ thuộc vào một lớp trở nên dễ dàng hơn nhiều, nhưng nó cũng có thể bị lạm dụng khá nhiều.

#Địa điểm phục vụ

Một cách để (ab) sử dụng vùng chứa là sự lôi kéo các đối tượng từ nó, thay vì đưa chúng vào ngữ cảnh hiện tại. Mẫu này được gọi là “vị trí dịch vụ” và trái ngược với việc chèn phần phụ thuộc. Nó trông như thế này:

class MyController
{
    public function indexAction()
    {
        $service = app(Service::class);

        
    }
}

Vị trí dịch vụ sẽ yêu cầu vùng chứa một đối tượng cụ thể. Điều này khiến bối cảnh bạn đang kéo dịch vụ này từ một điểm khó kiểm tra, cũng như một hộp đen ra bên ngoài: bạn không thể biết loại phụ thuộc bên ngoài nào MyController sử dụng mà không cần nhìn vào tất cả mã.

Một số khung thúc đẩy việc sử dụng vùng chứa này vì nó có thể đơn giản và nhanh chóng khi bắt đầu dự án. Trong các dự án có hàng trăm, thậm chí có thể hàng nghìn lớp được đăng ký trong vùng chứa, việc sử dụng vị trí dịch vụ có thể và sẽ trở thành một mớ hỗn độn; một vấn đề mà việc sử dụng tính năng tiêm phụ thuộc đúng cách sẽ giải quyết được.

Tôi cũng khuyên bạn nên đọc bài đăng của tôi về lý do tại sao vị trí dịch vụ lại là mô hình phản đối.

# Phụ thuộc được chia sẻ

Chuyển sang một số cảm xúc tích cực hơn: tận dụng hộp đựng một cách hiệu quả.

Khi sử dụng đúng cách tính năng chèn phụ thuộc, ngữ cảnh bên ngoài — trong nhiều trường hợp là vùng chứa — có quyền kiểm soát đối với phần phụ thuộc cụ thể mà nó đưa vào một lớp. Điều này có nghĩa là cùng một đối tượng có thể được đưa vào một số bối cảnh khác mà những bối cảnh đó không cần phải biết gì về việc chúng là “singleton” hay “các phần phụ thuộc được chia sẻ”.

Mặc dù việc chia sẻ các phần phụ thuộc có thể là một điều tốt và có tác dụng mạnh mẽ nhưng nó vẫn không nội dung tiêm phụ thuộc là gì mà là một tác dụng phụ có lợi.

# Tự động nối dây

Cuối cùng, một tính năng hữu ích khác không phải là tính năng chèn phụ thuộc: tự động nối dây.

Để giúp các nhà phát triển linh hoạt hơn, một số vùng chứa cho phép định nghĩa lớp thông minh, được xác định tự động. Điều này có nghĩa là bạn không cần phải mô tả thủ công cách xây dựng từng lớp. Những vùng chứa này sẽ quét mã của bạn và xác định những phần phụ thuộc nào là cần thiết bằng cách xem các gợi ý loại và khối tài liệu.

Rất nhiều điều kỳ diệu xảy ra ở đây, nhưng hệ thống dây tự động có thể là một công cụ hữu ích để phát triển ứng dụng nhanh chóng.


Nếu bây giờ, bạn muốn xem lại những kiến ​​thức cơ bản về nội dung chèn phụ thuộc Về. Bạn có thể đọc nó ở đây.



Trả lời