Các lập trình viên Ruby (và ngôn ngữ động khác) có sử dụng IoC / Dependency Injection không?


8

Tôi chủ yếu là một nhà phát triển ASP.NET và điều duy nhất tôi được giới thiệu trong những năm gần đây có tác động mạnh mẽ nhất đến chất lượng mã tôi viết là học cách sử dụng các thùng chứa IoC để quản lý các phụ thuộc giữa các lớp khác nhau của ứng dụng một cách hiệu quả.

Gần đây tôi đã biến sở thích của mình là học Ruby (và Rails) cho các dự án cá nhân và cho đến nay tôi vẫn yêu thích ngôn ngữ này. Tuy nhiên, một trong những điều tôi nhận thấy từ các hướng dẫn và tài liệu tham khảo khác nhau mà tôi đã sử dụng, đó là chưa có đề cập nào về việc sử dụng IoC. Điều này trái ngược hoàn toàn với .NET, nơi nó (và nơi không nên,) được đánh trống cho các nhà phát triển ở giai đoạn đầu.

Tôi đánh giá cao một lý do tại sao việc tiêm phụ thuộc có thể không cần thiết trong Ruby, đó là mọi thứ trong lớp đều công khai và ảo nên sẵn sàng sửa đổi để không thực sự cần thiết để viết bài kiểm tra đơn vị tốt. Nhưng tất nhiên có nhiều lợi ích khác khi sử dụng các bộ chứa IoC như các tùy chọn tách rời mà nó mang lại, quản lý việc tạo đối tượng và trọn đời, v.v.

Là tiêm phụ thuộc được sử dụng trong Ruby? Nếu không, tại sao điều này không phải là một vấn đề?

Câu trả lời:


6

Inversion of Control vẫn là một khái niệm áp dụng tốt. Bạn không cần phải thực hiện tiêm phụ thuộc để áp dụng IoC, mặc dù trong .NET họ có xu hướng đi cùng nhau thường xuyên.

Ổ đĩa lớn đằng sau việc tiêm phụ thuộc trong .NET là tránh phụ thuộc vào việc triển khai cụ thể. Trong Ruby, như bạn đã đề cập, mọi thứ cởi mở hơn rất nhiều và bạn có thể thay thế việc triển khai một lớp trong thời gian chạy, do đó, không cần phải tạo ra "giao diện" và tiêm phụ thuộc một cách rõ ràng.

Có thể lập luận rằng các giao diện và IoC / DI không thực sự cần thiết trong .NET (ngay cả khi thử nghiệm - có các khung mô phỏng sẽ cho phép bạn loại bỏ nhu cầu giao diện mọi thứ dưới ánh mặt trời), nhưng nó rõ rệt hơn trong Ruby.


4

Dependency Injection ít quan trọng hơn trong các ngôn ngữ động vì chúng là động - bạn có thể thay đổi mã của mình bất cứ khi nào bạn muốn để bạn không phải lên kế hoạch trước cho các phụ thuộc có khả năng thay đổi. Có nhiều cách dễ dàng hơn để đạt được IoC bằng một ngôn ngữ như Ruby.

Fabio Kung về chủ đề này đề cập đến Jamis Buck về điều tương tự - những điều này cho một chút chiều sâu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.