2010-07-16 33 views
10

Tôi vừa mới bắt đầu chơi với Google Guice dưới dạng khuôn khổ tiêm phụ thuộc và tôi đang cố gắng trang bị thêm cho dự án kích thước nhỏ đến vừa tôi vừa viết. Tôi hiểu những điều cơ bản về cách Guice hoạt động, nhưng có một chút mơ hồ về một số chi tiết về cách tiếp cận. Ví dụ:Làm quen với Google Guice

1) Mô-đun được sử dụng để xác định các ràng buộc của bạn, sau đó được đưa vào các kim phun. Bạn có xu hướng đặt mọi thứ vào một mô-đun hay bạn có xu hướng chia nhỏ mọi thứ thành nhiều mô-đun nhỏ hơn không?

2) Bạn có một vòi phun ở cấp cao nhất mà tiêm toàn bộ cây đối tượng hoặc nhiều kim phun rải rác mà chỉ tiêm những phụ thuộc mà bạn thực sự cần tiêm? Tôi đang suy nghĩ ở đây về cơ sở mã của riêng tôi, tất nhiên, có nhiều phụ thuộc, nhưng chỉ một số ít mà tôi cần phải kiểm soát trong quá trình thử nghiệm.

3) Tôi bị kẹt một cách tốt nhất để có được các thử nghiệm hệ thống/tích hợp của tôi bằng cách sử dụng các mô-đun chỉ thử nghiệm môi trường thay vì các bản vẽ sản xuất. Câu hỏi này có khả năng thực hiện cụ thể, nhưng tôi tò mò những phương pháp mọi người sử dụng. Để tham khảo, ứng dụng của tôi là một ứng dụng web dựa trên servlet.

Bất kỳ con trỏ nào khác?

Trả lời

13

1) Thông thường, bạn sẽ chia nhỏ mọi thứ thành nhiều mô-đun. Một trong những mục tiêu của Guice là giúp làm cho mã mô-đun, và đó là những gì mô-đun có cho. Làm thế nào bạn phá vỡ này xuống là vào bạn (và rõ ràng, bạn không hoàn toàn phải). Một ưu điểm của các mô-đun hạt mịn hơn là bạn có thể định nghĩa các mô-đun trong một gói cụ thể và làm cho các lớp thực hiện các giao diện gói riêng tư. Vì mô-đun nằm trong gói, nó có thể ràng buộc các lớp cụ thể đó và chúng có thể được sử dụng để định cấu hình Injector (trong một gói khác). Ngoài ra, bạn làm cho mã của bạn linh hoạt hơn khi bạn có thể thay đổi cách thức thực hiện một việc bằng cách chỉ thay đổi một mô-đun cho một mô-đun khác, thay vì phải thay đổi mã trong một mô-đun đơn nguyên khối.

2) Có, một vòi phun ở cấp cao nhất tiêm toàn bộ cây đối tượng là cách mọi thứ thường được thực hiện. Điều này trở lại với các mô-đun điều ... sử dụng chúng để phá vỡ phụ thuộc vào các nhóm và sử dụng một vòi phun.

3) Sử dụng lớp nhập điểm khác cấu hình bộ phun. Đối với một ứng dụng độc lập, tôi sẽ có một lớp khác nhau main ... cho một ứng dụng web, tôi cho rằng bạn có thể thực hiện một riêng biệt GuiceServletContextListener để thử nghiệm. Sau đó, bạn có thể thay thế toàn bộ mô-đun bằng các mô-đun để thử nghiệm hoặc sử dụng Modules.override để ghi đè ràng buộc trong mô-đun cụ thể, v.v.

+0

Ah, tôi nghĩ tôi bắt đầu thấy sự khác biệt ngay bây giờ. Tôi tình cờ gặp một bài viết khác của anh, làm sáng tỏ sự bối rối của tôi. Về cơ bản, nhiều kim phun trong suốt mã của bạn giống với một mẫu Service Locator hơn là tiêm phụ thuộc. Vẫn còn nhiều điều này cho tôi để có được để hiểu thấu, nhưng cảm ơn câu trả lời của bạn, vì nó mang lại cho tôi một khởi đầu thực sự tốt. –

0

Hãy xem cuốn sách Dependency Injection - nó bao gồm cả Guice và Spring, vì vậy rất bàn giao việc chuyển đổi từ khung này sang khung công tác khác. Chắc chắn tốt nếu bạn đã hiểu các nguyên tắc đằng sau IoC rồi.

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