আমার কিছু ইন্টারফেস রয়েছে যা আমি ভবিষ্যতে তৃতীয় পক্ষগুলি বাস্তবায়নের পরিকল্পনা করি এবং আমি নিজেই একটি বেস বাস্তবায়ন সরবরাহ করি। আমি উদাহরণটি দেখানোর জন্য কেবল একটি দম্পতি ব্যবহার করব।
বর্তমানে, তারা হিসাবে সংজ্ঞায়িত করা হয়
আইটেম:
public interface Item {
String getId();
String getName();
}
ItemStack:
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);
}
এখন, Item
এবং ItemStackFactory
আমি ভবিষ্যতে এটির প্রসারিত করার জন্য কিছু তৃতীয় পক্ষের একেবারে ধারণা করতে পারি। ItemStackContainer
ভবিষ্যতেও বাড়ানো যেতে পারে, তবে আমার সরবরাহিত ডিফল্ট প্রয়োগের বাইরে আমি যেভাবে আগে থেকেই ধারণা করতে পারি তা নয়।
এখন, আমি এই লাইব্রেরিটি যথাসম্ভব শক্তিশালী করার চেষ্টা করছি; এটি এখনও প্রাথমিক পর্যায়ে রয়েছে (প্রাক-প্রাক-আলফা) সুতরাং এটি ওভার ইঞ্জিনিয়ারিং (YAGNI) এর কাজ হতে পারে। জেনেরিক ব্যবহারের জন্য এটি কি উপযুক্ত জায়গা?
public interface ItemStack<T extends Item> {
T getItem();
int getQuantity();
}
এবং
public interface ItemStackFactory<T extends ItemStack<I extends Item>> {
T createItemStack(I item, int quantity);
}
আমি আশংকা করি যে এটি বাস্তবায়ন এবং ব্যবহার পড়া এবং বুঝতে আরও অসুবিধাজনক হতে পারে; আমি মনে করি যেখানেই সম্ভব জেনেরিক বাসা বাঁধবার পরামর্শ দেওয়া উচিত।