16

Tôi đang cố gắng để hiểu khi nào tôi nên sử dụng một container so với phụ thuộc tiêm chích thủ công. Nếu tôi có một ứng dụng sử dụng một giao diện 1-2 và chỉ có 1-2 triển khai cụ thể cho mỗi giao diện, tôi sẽ dựa vào việc xử lý bản thân mình.Khi nào sử dụng thùng chứa IOC?

Nếu tôi có một ứng dụng nhỏ sử dụng 2-3 giao diện và mỗi giao diện có 2-3 triển khai cụ thể, tôi có nên sử dụng vùng chứa đầy đủ không? Có cái gì đó đơn giản như this đủ? Về cơ bản tôi đang cố gắng hiểu khi nào nó thích hợp để xử lý thủ công những phụ thuộc này, khi (hoặc nếu) tôi nên sử dụng một cái gì đó đơn giản như ở trên, và khi nào sử dụng một container IOC như Ninject, Windsor, v.v ... Nó có thể không thích hợp để đặt một số vào một cái gì đó như thế này, nhưng làm thế nào tôi có thể nói đó là thời gian để sử dụng một container IOC?

+0

http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc-container-as-opposed-to-straightforward-di-code –

+0

Tôi không hỏi tại sao tôi nên sử dụng một, tôi hỏi khi nào tôi nên sử dụng. Tôi đã nhận thức được những lợi ích, nhưng tôi không chắc chắn về thời điểm chính xác để sử dụng nó. – nivlam

Trả lời

14

Điều quan trọng cần lưu ý ở đây là bạn có thể (và nên) viết mã của mình theo cách DI-friendly, but container-agnostic.

Điều này có nghĩa là bạn nên luôn luôn đẩy thành phần phụ thuộc vào một điểm mà bạn không thể trì hoãn lâu hơn nữa. Đây được gọi là Composition Root và thường được đặt ở gần điểm vào của ứng dụng.

Nếu bạn thiết kế ứng dụng theo cách này, lựa chọn DI Container (hoặc không có DI Container) xoay quanh một nơi trong ứng dụng của bạn và bạn có thể nhanh chóng thay đổi chiến lược.

Bạn có thể chọn để sử dụng Poor Man DI nếu bạn chỉ có một vài phụ thuộc, hoặc bạn có thể chọn để sử dụng một full-blown DI container. Được sử dụng trong thời trang này, bạn sẽ không phụ thuộc vào bất kỳ DI Container cụ thể nào, do đó, lựa chọn trở thành ít quan trọng hơn về mặt bảo trì.

Ngăn chứa DI giúp bạn quản lý sự phức tạp, bao gồm cả tuổi thọ đối tượng. Được sử dụng như mô tả ở đây, nó không làm bất cứ điều gì bạn không thể viết trong tay, nhưng nó làm nó tốt hơn và ngắn gọn hơn. Như vậy, ngưỡng của tôi khi bắt đầu sử dụng DI Container sẽ khá thấp.

Tôi sẽ bắt đầu sử dụng DI Container sau khi đã vượt qua một số phụ thuộc. Most of them are pretty easy to get started with anyway.


Cập nhật: My November 2012 answer to that question.

Các vấn đề liên quan