Tôi đang lên kế hoạch để nói chuyện về Dependency Injection và IoC Container, và tôi đang tìm kiếm một số đối số tốt để sử dụng nó.
Những lợi ích quan trọng nhất của việc sử dụng kỹ thuật này và các công cụ này là gì?
Tôi đang lên kế hoạch để nói chuyện về Dependency Injection và IoC Container, và tôi đang tìm kiếm một số đối số tốt để sử dụng nó.
Những lợi ích quan trọng nhất của việc sử dụng kỹ thuật này và các công cụ này là gì?
Câu trả lời:
Quan trọng nhất, đối với tôi, là làm cho nó dễ dàng tuân theo Nguyên tắc Trách nhiệm duy nhất .
DI / IoC giúp tôi dễ dàng quản lý các phụ thuộc giữa các đối tượng. Đổi lại, điều đó giúp tôi dễ dàng phá vỡ chức năng kết hợp thành hợp đồng (giao diện) của chính nó. Do đó, mã của tôi đã được mô đun hóa nhiều hơn kể từ khi tôi biết về DI / IoC.
Một kết quả khác của điều này là tôi có thể dễ dàng nhìn thấy đường đến một thiết kế hỗ trợ Nguyên tắc Đóng mở . Đây là một trong những kỹ thuật truyền cảm hứng tự tin nhất (chỉ đứng sau thử nghiệm tự động). Tôi nghi ngờ tôi có thể tán thành những đức tính của Nguyên tắc Đóng mở đủ.
DI / IoC là một trong số ít những thứ trong sự nghiệp lập trình của tôi là "người thay đổi cuộc chơi". Có một khoảng cách lớn về chất lượng giữa mã tôi đã viết trước và sau khi học DI / IoC. Hãy để tôi nhấn mạnh rằng một số chi tiết. HUGE cải thiện chất lượng mã.
Các ví dụ thực sự mở mắt tôi đang thấy cách nó có thể dễ dàng kiểm tra các vật thể được tạo ra theo kiểu như vậy. Trước đó, tôi đã gặp khó khăn khi cố gắng cách ly các đối tượng để kiểm tra đơn vị. Tôi thường viết các bài kiểm tra để tương tác với một hệ thống lớn hơn nhiều. Điều này thực sự khó khăn vì toàn bộ hệ thống ít dự đoán hơn và dễ thay đổi hơn các thành phần riêng lẻ.
Ưu điểm của tiêm phụ thuộc là:
Tôi nghĩ rằng lợi ích thực tế là chính trị nhiều hơn là kỹ thuật. DI chỉ đơn giản là một thay thế cho mẫu Định vị dịch vụ , không có gì hơn. Chính nó, nó không làm cho việc tuân theo các nguyên tắc như SRP hoặc OCP trở nên dễ dàng hơn hoặc tách lớp. Những người trả lời khác ở đây đang nhầm lẫn các khái niệm và kỹ thuật khác nhau, IMO.
Bạn có thể đạt được các mục tiêu tương tự liên quan đến độ gắn kết cao và khớp nối thấp bằng cách sử dụng Bộ định vị dịch vụ hoặc chỉ đơn giản là khởi tạo trực tiếp các phụ thuộc bất cứ khi nào có thể áp dụng (hầu hết thời gian).
Bây giờ, tôi biết nhiều người sẽ không đồng ý với ý kiến này. Tôi sẽ vui mừng thảo luận về các ví dụ cụ thể.
Khi DI được sử dụng để phơi bày các đối tượng bên trong cho mục đích thử nghiệm, mẫu đã bị lạm dụng.