আমি গুগল গুইসে@ImplementedBy
উপলব্ধ টীকাগুলি সম্পর্কে সম্প্রতি পড়েছি । এটি প্রোগ্রামারকে নির্ভর করে ইনজেকশনে ভবিষ্যতে ব্যবহারের জন্য একটি ইন্টারফেস এবং এর প্রয়োগের মধ্যে একটি আবশ্যককে নির্দিষ্ট করার অনুমতি দেয়। এটি একটি ইন-টাইম বাইন্ডিংয়ের একটি উদাহরণ ।
আমি আমার মডিউলগুলিতে সুস্পষ্ট বাইন্ডিংগুলি সংজ্ঞায়িত করতে নীচের সিনট্যাক্সটি ব্যবহার করতে বেশ অভ্যস্ত:
bind(SomeInterface.class).to(SomeInterfaceImplementation.class);
ডকুমেন্টেশন অনুসারে, এটি @ImplementedBy
টীকাটির নীচের ব্যবহারের সমান :
@ImplementedBy(SomeInterfaceImplementation.class)
public interface SomeInterface {
//method declarations
}
আমি এখানে কেবল লাভটি দেখতে পাচ্ছি যে কোডটি প্রান্তিকভাবে খাটো। একই সময়ে, এই পদ্ধতির সঠিকভাবে একই ডক্স দ্বারা নির্দেশিত একটি অপূর্ণতা রয়েছে:
@ImplementedBy
সাবধানে ব্যবহার করুন; এটি ইন্টারফেস থেকে এর প্রয়োগের জন্য একটি সংকলন-সময় নির্ভরতা যুক্ত করে।
এই ধরনের নির্ভরতা অনেক ক্ষেত্রে সমস্যা নাও হতে পারে তবে আমি ব্যক্তিগতভাবে এটিকে কোড গন্ধ হিসাবে দেখি।
কোন ব্যবহারের ক্ষেত্রে @ImplementedBy
টীকাগুলি ব্যবহারের পক্ষে মূল্যবান হয়?
একটি সম্ভাব্য উপায় মনে হচ্ছে এটি কোনও গ্রন্থাগার বা কাঠামোর কোডে নিয়োগ করা। দস্তাবেজগুলিতে বর্ণিত হিসাবে, টীকাগুলি একটি স্পষ্টত কোনও দ্বারা সহজেই ওভাররাইড হওয়া একটি ডিফল্ট বাঁধাই সরবরাহ করতে পারে।
যদি কোনও ধরণের
bind()
বিবৃতি উভয় ক্ষেত্রে থাকে (প্রথম যুক্তি হিসাবে) এবং@ImplementedBy
এ্যানোটেশন থাকে তবেbind()
বিবৃতিটি ব্যবহৃত হয়। টীকাটি একটি ডিফল্ট প্রয়োগের পরামর্শ দেয় যা একটি বাঁধার সাথে ওভাররাইড করা যেতে পারে।
এইভাবে, একটি লাইব্রেরির বিকাশকারী হিসাবে, আমি আমার ব্যবহারকারীদের বক্স বাইন্ডিংয়ের বাইরে আউট সরবরাহ করতে পারি যা ক্লায়েন্ট কোডের কোথাও কাস্টমাইজ করা যায়।
টীকাটি থাকার কি একমাত্র কারণ? নাকি আমি এখানে কিছু মিস করছি? আমি কোডে এটি ব্যবহার করে কিছু অর্জন করতে পারি যা কেবলমাত্র কিছু ব্যবসায়িক যুক্তির যত্ন নেওয়া অ্যাপ্লিকেশন এবং কোনও লাইব্রেরি / কাঠামো বাড়ানো নয়?