2009-09-22 27 views

Trả lời

37

Sử dụng Google Guice để dễ dàng trong thử nghiệm đơn vị chỉ là lợi thế cấp cao. Một số người thậm chí có thể không sử dụng thử nghiệm đơn vị trong dự án của họ. Mọi người đã sử dụng Spring/Dependency Injection hơn là chỉ để thử nghiệm đơn vị.

Lợi thế mức thấp của việc sử dụng Google Guice là vấn đề gắn kết trong ứng dụng của bạn, các lớp học của bạn trong dự án có thể được ghép lỏng lẻo giữa nhau. Tôi có thể cung cấp một lớp học cho một lớp khác mà không bị phụ thuộc lẫn nhau.

Hãy xem xét ví dụ sau:

public class A{ 

} 

public class B{ 
    A a = new A(); 
} 

Class B sẽ được chặt chẽ cùng với Class A, hay nói cách khác, nó phụ thuộc vào sự tồn tại của lớp A.

Nhưng với Guice tôi thay vì có thể làm cho nó lỏng lẻo như thế này:

public class B{ 
    private A a; 

    @Inject 
    public B(A a){ 
     this.a = a; 
    } 
} 

Class B hiện nay lỏng lẻo cùng với A, và Guice có trách nhiệm cung cấp các ví dụ của A thay vì B phải nhanh chóng nó . Với điều này, bạn có thể mở rộng nó để cung cấp giao diện từ A đến B và việc triển khai có thể là đối tượng Mock nếu bạn muốn đơn vị kiểm tra ứng dụng của mình.

Có nói rằng chúng tôi chỉ thảo luận về các lợi ích của Dependency Injection cho đến thời điểm này. Ngoài tiêm phụ thuộc, lợi ích của việc sử dụng Google Guice là:

  1. Guice có triển khai thực hiện rất sạch sẽ. Như bạn có thể thấy từ ví dụ bạn chỉ cần thêm hàm tạo chú thích @Injection.
  2. Guice cũng có setter Injection sử dụng cùng một chú thích.
  3. Có nói rằng, chú thích dựa trên Tiêm là cách tiếp cận rất sạch sẽ so với tiêm dựa trên XML như một số thực hiện DI khác.
  4. Tất cả việc chèn và cấu hình phụ thuộc đều sử dụng Java, vì vậy bạn được bảo đảm để có được một loại an toàn trong ứng dụng của bạn theo mặc định.
  5. Guice có triển khai rất nhỏ về Lập trình hướng Aspect (hoặc có thể bạn gọi nó là trình bao bọc cho triển khai AOPAlliance AOP). Và điều tốt đẹp của nó là nó không tạo ra những cái cuống hay cái gì hết.

Đó là tổng quan về nó.Nhưng khi bạn nhận được sâu hơn với Guice, có rất nhiều điều tốt đẹp hơn về nó. Một ví dụ đơn giản thực tế là nếu bạn đang sử dụng GWT with MVP implementation, các thành phần/tiện ích trong ứng dụng GWT của bạn được kết hợp rất lỏng lẻo và không được tích hợp chặt chẽ với nhau.

4

Tôi nghĩ rằng lợi thế đi kèm với mã hóa cho giao diện, thử nghiệm và proxy.

Mã hóa thành giao diện giúp mã của bạn được phân lớp đúng cách, cho phép bạn có thể chèn mocks để thử nghiệm và cho phép bạn tạo proxy tự động để mã khách hàng không cần phải lo lắng về việc triển khai.

Điều này đúng với Guice, Spring, PicoContainer và tất cả các khuôn khổ DI.

Đủ gọn gàng?

15

Có thể bạn nên quay ngược thời gian và xem xét kỹ hơn các vấn đề mà Guice muốn giải quyết. Để hiểu được những động lực đằng sau Guice, tin tức Bob Lee: I Don't Get Spring trên TheServerSide.COM (và ý kiến ​​của nó) là điểm khởi đầu hoàn hảo. Sau đó, tiếp tục với thông báo Google Guice, A Java Dependency Injection Framework (và nhận xét) và Tech Talk: Bob Lee on Google Guice (và các nhận xét).

Cá nhân tôi chia sẻ mối quan ngại về XML tà ác: địa chỉ cấu hình XML, lỗi XML và các lỗi thời gian chạy có thể xảy ra, các định danh chuỗi bị lỗi và tái cấu trúc, vv… Thực ra, tôi tin rằng ý kiến ​​hoài nghi về Mùa xuân và sự đồng nhất là tốt cho mọi người (kể cả mùa xuân). Tôi đã rất vui khi thấy một người chơi mới trong bối cảnh khung công tác DI, đặc biệt là một khung công tác hiện đại tận dụng các tính năng Java 5 (generics và chú thích vì lợi ích an toàn kiểu).

Và vì Google đang chạy Guice trong các ứng dụng quan trọng của sứ mệnh (hầu hết mọi ứng dụng dựa trên Java cũng là ứng dụng Guice-base: AdWords, Google Documents, Gmail và thậm chí YouTube theo báo cáo "Crazy" Bob Lee Guice²), tôi không thể tin rằng Guice hoàn toàn sai và không cung cấp bất kỳ giá trị nào. Đáng buồn thay, tôi không nghĩ Google sẽ cung cấp nhiều mã của các ứng dụng này làm ví dụ ... Nhưng bạn có thể tìm thấy những điều thú vị trong số list of applications that use Guice và/hoặc list of 3rd party Guice addons. Hoặc xem các sách được đề cập trong số Guice². Hoặc yêu cầu Bob :)

+0

Chính xác bạn ngụ ý gì bởi "số nhận dạng chuỗi phản ứng bất lợi"? Bạn có thể mở rộng một chút không? – Geek

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