Gần đây tôi đã đọc về @ImplementedBy
chú thích có sẵn trong Google Guice . Nó cho phép lập trình viên chỉ định một ràng buộc giữa một giao diện và việc thực hiện nó để sử dụng trong tương lai trong tiêm phụ thuộc. Đây là một ví dụ về ràng buộc chỉ trong thời gian .
Tôi khá quen với việc xác định các ràng buộc rõ ràng trong các mô-đun của mình, sử dụng cú pháp sau:
bind(SomeInterface.class).to(SomeInterfaceImplementation.class);
Theo tài liệu này, điều này tương đương với việc sử dụng @ImplementedBy
chú thích sau đây:
@ImplementedBy(SomeInterfaceImplementation.class)
public interface SomeInterface {
//method declarations
}
Lợi ích duy nhất tôi có thể thấy ở đây là mã ngắn hơn một chút. Đồng thời, cách tiếp cận này có một nhược điểm được chỉ ra bởi cùng một tài liệu:
Sử dụng
@ImplementedBy
cẩn thận; nó thêm một phụ thuộc thời gian biên dịch từ giao diện để thực hiện nó.
Sự phụ thuộc như vậy có thể không phải là một vấn đề trong nhiều trường hợp nhưng cá nhân tôi thấy nó là một mùi mã.
Những trường hợp sử dụng làm cho @ImplementedBy
chú thích có giá trị sử dụng?
Một cách có thể dường như là sử dụng nó trong mã của thư viện hoặc khung. Như được mô tả trong các tài liệu, chú thích có thể cung cấp một ràng buộc mặc định dễ dàng bị ghi đè bởi một tài liệu rõ ràng.
Nếu một loại nằm trong cả một
bind()
câu lệnh (như là đối số đầu tiên) và có@ImplementedBy
chú thích, thìbind()
câu lệnh được sử dụng. Chú thích cho thấy một triển khai mặc định có thể được ghi đè bằng một ràng buộc.
Bằng cách này, với tư cách là nhà phát triển của một thư viện, tôi có thể cung cấp cho người dùng của mình một ràng buộc ngoài hộp có thể được tùy chỉnh ở đâu đó trong mã máy khách.
Đây có phải là lý do duy nhất để chú thích tồn tại? Hay là tôi đang thiếu thứ gì đó? Tôi có thể đạt được bất cứ điều gì bằng cách sử dụng nó trong mã chỉ là một ứng dụng chăm sóc một số logic nghiệp vụ và không phải là một thư viện / khung để được mở rộng?