Tôi có một số giao diện mà tôi dự định các bên thứ ba sẽ triển khai trong tương lai và tôi tự cung cấp một triển khai cơ sở. Tôi sẽ chỉ sử dụng một vài để hiển thị ví dụ.
Hiện tại, chúng được định nghĩa là
Mục:
public interface Item {
String getId();
String getName();
}
Mục kho:
public interface ItemStackFactory {
ItemStack createItemStack(Item item, int quantity);
}
ItemStackContainer:
public interface ItemStackContainer {
default void add(ItemStack stack) {
add(stack, 1);
}
void add(ItemStack stack, int quantity);
}
Bây giờ, Item
và ItemStackFactory
tôi hoàn toàn có thể thấy trước một số bên thứ ba cần gia hạn trong tương lai. ItemStackContainer
cũng có thể được mở rộng trong tương lai, nhưng không phải theo cách mà tôi có thể thấy trước, ngoài việc triển khai mặc định được cung cấp của tôi.
Bây giờ, tôi đang cố gắng làm cho thư viện này mạnh nhất có thể; điều này vẫn còn ở giai đoạn đầu (tiền pre-alpha) vì vậy đây có thể là một hành động của kỹ thuật quá mức (YAGNI). Đây có phải là một nơi thích hợp để sử dụng thuốc generic?
public interface ItemStack<T extends Item> {
T getItem();
int getQuantity();
}
Và
public interface ItemStackFactory<T extends ItemStack<I extends Item>> {
T createItemStack(I item, int quantity);
}
Tôi sợ rằng điều này có thể sẽ khiến việc triển khai và sử dụng trở nên khó đọc và khó hiểu hơn; Tôi nghĩ rằng đó là khuyến nghị để tránh chung chung lồng nhau bất cứ nơi nào có thể.