Tiêm phụ thuộc php là gì?

Dependency Injection là một mẫu thiết kế phần mềm cho phép tránh các phụ thuộc mã hóa cứng và có thể thay đổi các phụ thuộc cả trong thời gian chạy và thời gian biên dịch

2014

Tháng một, 06

lập trình

4 phút đọc

Thẻ. web dev php tiêm phụ thuộc mẫu thiết kế lập trình

Dependency Injection là một mẫu thiết kế phần mềm cho phép tránh các phụ thuộc mã hóa cứng và có thể thay đổi các phụ thuộc cả trong thời gian chạy và thời gian biên dịch

Bằng cách sử dụng Dependency Injection, chúng tôi có thể viết mã mô-đun, có thể bảo trì và kiểm tra được nhiều hơn. Tất cả các dự án đều có sự phụ thuộc. Dự án càng lớn thì càng có nhiều phụ thuộc;

Dependency Injection không phải là một mẫu mới và nó đã được sử dụng phổ biến trên nhiều ngôn ngữ như Java, nhưng mẫu này hơi mới trong thế giới PHP và nó nhanh chóng đạt được sức hút nhờ các khung như laravel

Trước tiên, hãy minh họa các khái niệm này bằng cách tạo một cặp lớp mà không có phép nội xạ phụ thuộc, sau đó viết lại mã để sử dụng mẫu nội xạ phụ thuộc;

Thoạt nhìn, mã trông khá bình thường và đó là thứ mà nhiều nhà phát triển PHP gọi là mã tốt, tuy nhiên nếu chúng ta xem xét kỹ hơn bằng cách sử dụng S. O. L. I. Nguyên tắc D chúng ta có thể thấy rằng mã thực sự có nhiều vấn đề

  • StockItem được kết hợp chặt chẽ với lớp Product và mặc dù điều này có vẻ không tệ trong ví dụ cụ thể này. Hãy tưởng tượng rằng chúng ta đã thay đổi lớp StockItem để bao gồm một tham số mới, sau đó chúng ta sẽ phải sửa đổi từng lớp nơi đối tượng StockItem được tạo

  • Lớp Sản phẩm biết quá nhiều, trong trường hợp này là trạng thái và số lượng hàng tồn kho, giả sử ứng dụng của chúng ta có thể xử lý hàng tồn kho từ nhiều nguồn và cửa hàng nhưng cho cùng một sản phẩm. Với ý nghĩ đó, lợi ích tốt nhất của chúng tôi là làm cho lớp Sản phẩm biết ít hơn về khoảng không quảng cáo của nó

  • Chúng tôi chỉ làm cho cuộc sống của mình khó khăn hơn khi kiểm tra mã đơn vị. Vì chúng ta đang khởi tạo stockItem bên trong hàm tạo nên không thể kiểm tra đơn vị lớp Sản phẩm mà không kiểm tra lớp StockItem

Hãy tiêm một cái gì đó

Mặt khác, bằng cách sử dụng phép nội xạ phụ thuộc, chúng ta có thể khắc phục hầu hết các sự cố này, hãy lấy cùng một đoạn mã nhưng sử dụng phép nội xạ phụ thuộc

Xây dựng tiêm

Bằng cách sử dụng phép nội xạ phụ thuộc, chúng ta có mã dễ bảo trì hơn, trong ví dụ trước, chúng ta đang sử dụng một loại phép nội xạ phụ thuộc thường được gọi là Constructor Injection. Bằng cách thực hiện một thay đổi đơn giản, chúng tôi có thể giảm mức độ phức tạp của mã và cải thiện chất lượng tổng thể;

Tiêm cấu trúc cho đến nay là phương pháp phổ biến nhất được sử dụng và có một số lợi thế bằng cách sử dụng loại tiêm đặc biệt này

  • Nếu lớp phụ thuộc được yêu cầu và không thể hoạt động nếu không có nó, bằng cách sử dụng phép nội xạ hàm tạo, chúng tôi đảm bảo rằng các phụ thuộc được yêu cầu đều có mặt

  • Vì hàm tạo chỉ được gọi khi khởi tạo đối tượng của chúng ta nên chúng ta có thể chắc chắn rằng phần phụ thuộc không thể thay đổi hoặc thay đổi trong suốt thời gian tồn tại của đối tượng

Hai điểm này làm cho Constructor Injection cực kỳ hữu ích, tuy nhiên cũng có một vài nhược điểm khiến nó không phù hợp với mọi tình huống.

  • Vì tất cả các phụ thuộc là bắt buộc nên nó không phù hợp khi cần các phụ thuộc tùy chọn

  • Trong khi sử dụng kế thừa lớp cố gắng mở rộng và ghi đè hàm tạo trở nên khó khăn

Tiêm Setter

Một kiểu tiêm phụ thuộc phổ biến khác được gọi là tiêm setter và mã giống như trên sẽ giống như thế này

Như chúng ta có thể thấy, với Setter Injection, các phụ thuộc được cung cấp cho lớp của chúng ta sau khi nó được khởi tạo bằng các phương thức setter. Setter Injection có một vài ưu điểm

  • Cho phép các phụ thuộc tùy chọn và lớp có thể được tạo với các giá trị mặc định

  • Thêm các phụ thuộc mới dễ dàng như thêm một phương thức setter mới và nó sẽ không phá vỡ bất kỳ mã hiện có nào

Setter Injection có thể phù hợp hơn cho các tình huống cần linh hoạt hơn

Vì vậy, Dependency Injection có phù hợp với ứng dụng của tôi không?

Vào cuối ngày, mỗi nhà phát triển phải đưa ra quyết định về mẫu thiết kế nào phù hợp với ứng dụng của mình, có thể là Dependency Injection hay thứ gì khác;

Nhưng nếu bạn đang làm việc trên một dự án lớn và chạy dài, thì rất có thể việc tiêm phụ thuộc có thể là giải pháp phù hợp cho dự án của bạn

PHP có tiêm phụ thuộc không?

Các phần phụ thuộc có thể được thay đổi trong thời gian chạy cũng như thời gian biên dịch. Chúng ta có thể sử dụng Dependency Injection để viết mã mô-đun, có thể kiểm tra và bảo trì . mô-đun. Dependency Injection giúp tạo các lớp hoặc mô-đun hoàn toàn tự cung cấp. có thể kiểm tra. Nó giúp viết mã có thể kiểm tra dễ dàng, ví dụ như kiểm tra đơn vị chẳng hạn.

Điều gì có nghĩa là tiêm phụ thuộc?

Trong thiết kế phần mềm lập trình hướng đối tượng (OOP), phép nội xạ phụ thuộc (DI) là quá trình cung cấp tài nguyên mà một đoạn mã nhất định yêu cầu. The required resource, which is often a component of the application itself, is called a dependency.

Ưu điểm của tiêm phụ thuộc trong PHP là gì?

Điều này cung cấp cho nhà phát triển quyền tự do tạo đối tượng máy tính với các thành phần khác nhau mà không phải mở rộng lớp và ghi đè hàm tạo . Đôi khi điều này còn được gọi là đảo ngược kiểm soát.

Ba loại tiêm phụ thuộc là gì?

Vào mùa xuân, có ít nhất ba cách thực hiện DI. XML , chú thích, mã Java thuần túy. Angular có cơ chế DI riêng bằng cách sử dụng trình trang trí @Injectable. ASP. NET Core thực hiện điều đó thông qua bộ chứa dịch vụ tích hợp sẵn của nó, IServiceProvider Google Guice sử dụng chú thích hàm tạo @Inject