2009-02-03 25 views
6

Tôi đã theo dõi Daniel Cazzulino's chuỗi về building a DI container using TDD. Trong part five of the series, anh ấy thêm hỗ trợ cho phân cấp vùng chứa mà không nhận xét về những gì làm cho tính năng này hữu ích. Tôi đã nhìn thấy đề cập đến hỗ trợ cho hệ thống phân cấp trong nhiều khuôn khổ DI, nhưng tôi không hiểu khi nào chúng được sử dụng và tại sao. Ai đó có thể cung cấp một số cái nhìn sâu sắc?Tại sao khung công tác Dependency Injection hỗ trợ phân cấp vùng chứa?

Trả lời

1

Here's a sample sử dụng vùng chứa con trong kịch bản tương tự như mô tả của Matt. Nó sử dụng các thùng chứa con để chọn giữa các cấu hình cơ sở dữ liệu khác nhau.

Mấu chốt ở đây là hầu hết các cấu hình được chia sẻ giữa các container con (mà chia sẻ một phần thuộc về container mẹ)

1

Tôi để lại nhận xét trên blog của kzu hỏi cùng một câu hỏi. Đó là một sự xấu hổ, ông đã không làm rõ các trường hợp sử dụng cho một tính năng như vậy trước khi mã hóa nó.

Điều duy nhất tôi có thể nghĩ đến là nếu bạn muốn có các loại khác nhau được giải quyết từ vùng chứa của bạn trong các phần khác nhau của ứng dụng. Ví dụ: nếu bạn có một hệ thống nhập đơn đặt hàng với hai phần riêng biệt và mỗi phần giống nhau ngoại trừ việc chúng cần hiển thị danh sách sản phẩm khác, bạn có thể tạo vùng chứa con cho từng phần và ghi đè đăng ký của bạn kho lưu trữ sản phẩm trong mỗi. Bất cứ khi nào một phần cố gắng giải quyết kho lưu trữ sản phẩm (hoặc bất kỳ thứ gì phụ thuộc vào một kho lưu trữ), nó sẽ nhận được cá thể bạn thiết lập trong vùng chứa con chứ không phải là cha mẹ. Sắp xếp giống như ghi đè phương thức ảo.

Đây có thể là cách thoát khỏi cơ sở, nhưng đó là cách tốt nhất tôi có thể nghĩ ra.

0

Có lý do chính đáng cho việc đựng đứa trẻ nếu dependency injection được chấp nhận hoàn toàn bởi dự án . Hãy tưởng tượng một ứng dụng xử lý các thông điệp từ hai hệ thống khác nhau, nhưng tương tự nhau. Hầu hết quá trình xử lý tương tự nhau, nhưng có các biến thể để hỗ trợ khả năng tương thích từ các hệ thống đó. Mục đích của chúng tôi là sử dụng lại mã mà chúng tôi có thể, trong khi viết mã khác nhau theo yêu cầu khác nhau.

Trong lập trình OO, chúng tôi kết nối với nhau một loạt các lớp sẽ cộng tác để đáp ứng các yêu cầu hệ thống. Thùng chứa DI chịu trách nhiệm này. Khi một thông báo đến từ một hệ thống, chúng tôi muốn xây dựng một bộ các lớp cộng tác phù hợp để xử lý một thông điệp từ hệ thống cụ thể đó.

Chúng tôi có vùng chứa cấp cao nhất có các mục không thay đổi giữa hai hệ thống. Sau đó, chúng tôi có các thùng chứa con mà làm khác nhau giữa các hệ thống. Khi có tin nhắn đến, chúng tôi yêu cầu hộp chứa DI trẻ em bị dị ứng cho một số messageProcessor. Dựa trên cấu hình của container đó (rơi trở lại container cha khi cần thiết) khuôn khổ DI có thể trả về một MessageProcessor (là một đối tượng được hỗ trợ bởi các cộng tác viên approriate) cho hệ thống được đề cập.

Vui lòng để lại nhận xét nếu đây không phải là câu trả lời rõ ràng. Ngoài ra, bạn có thể tìm kiếm "vấn đề chân robot". Mỗi chân giống hệt nhau nhưng cần chân trái và chân kia cần chân phải. Chúng tôi có thể có một thùng chứa DI cho mỗi chân.

0

Ví dụ tốt nhất mà tôi biết về các vùng chứa lồng nhau là hệ thống cửa sổ. Nó rất tốt cho việc tách các mối quan tâm để có mỗi tab/cửa sổ có thùng chứa riêng của nó độc lập với các tab/cửa sổ khác, với tất cả các thùng chứa cửa sổ thừa hưởng các phụ thuộc toàn cầu từ một thùng chứa mẹ.

Điều này đặc biệt cần thiết nếu bạn có thể có tab/cửa sổ trùng lặp, vì trong nhiều trường hợp bạn muốn phân biệt các lớp khác nhau cho mỗi tab/cửa sổ trùng lặp

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