Tôi đã đọc rất nhiều về Dependency Injection, Inversion of Control và IoC containers. Tôi cũng chủ yếu lập trình bằng ngôn ngữ động (PHP tại nơi làm việc, Python ở nhà). Dưới đây là những điều tôi đang tìm kiếm, nhưng điều này để lại một khoảng trống rất nhiều cho tôi để điền vào như tôi mảnh nó tất cả cùng nhau:IOC Vùng chứa và ngôn ngữ động (mất 2)
- Why are IOC containers unnecessary with dynamic languages?
- Why do I need an IoC container as opposed to straightforward DI code?
- Advantages an IoC container provides beyond simple DI (bài viết trên blog)
Vì vậy, những gì tôi đang đọc là: IoC container là một thỏa thuận lớn hơn nhiều trong các ngôn ngữ tĩnh, bởi vì nó dễ dàng hơn nhiều để thực hiện DI trong ngôn ngữ động. Nhưng họ cũng cung cấp lợi ích vượt xa DI, như quản lý phụ thuộc cho bạn và giúp bạn tiết kiệm từ việc phải chuỗi với nhau một tá các đối tượng bằng tay. Và, một cách ngẫu nhiên, chúng phức tạp, vì vậy đừng cố gắng tự làm chúng (nhưng không có cái nào tốt cho PHP).
Tôi cảm thấy thông tin này khiến tôi bị loại ... bị kẹt. Tôi phải làm gì với nó? Tôi làm việc trong một codebase rất lớn, với các phụ thuộc rất phức tạp (và có thể là một nhu cầu mạnh mẽ để tái cấu trúc, nhưng đó là một vấn đề song song khác). Chúng tôi đã làm rất kém tại triển khai DI cho đến bây giờ, và tôi thực sự cố gắng biến chúng ta đi đúng hướng. Có vẻ như không có gì liên quan đến các ngôn ngữ động và IoC (hoặc ít nhất là các thùng chứa IoC).
Tôi có nên tắt các phụ thuộc "tay chuỗi" một cách tốt hơn trong thời gian này không, và lo lắng về việc tự động hóa nó trong một thùng chứa sau, sau khi tôi xử lý tốt hơn các nguyên tắc? Là nó có giá trị thực hiện container IoC đơn giản của riêng tôi? Hoặc là lợi ích chỉ không cuối cùng đáng giá trong PHP?
Bạn đã thử http://components.symfony-project.org/dependency-injection/ container chưa? – Mchl
@mchl: Cái đó thực sự trông rất đẹp. Cảm ơn! (Chưa kể, tài liệu là một trong những mô tả tốt hơn về một container IoC mà tôi đã nhìn thấy ... sẽ hữu ích khi tôi tìm ra tất cả những thứ này) – keithjgrant
@mchl: Liên kết của bạn là điều hữu ích nhất tôi đã nhìn thấy chưa. Di chuyển nó vào một câu trả lời, và tiền thưởng là của bạn nếu không có gì tốt hơn bề mặt. – keithjgrant