ডেগার 2 @ বিন্ডস বনাম @ প্রচার

ডাগার ২.১২ শুরু করা (দুঃখিত, আমি এটির বেশ কিছুক্ষণ আগে জানি .. তবে এটি এখনও বোঝার মতো), সেখানে @Binds নামে এই নতুন বৈশিষ্ট্যটি ড্যাগারগুলিতে যুক্ত করা হয়েছে। এটি সম্পর্কে ইতিমধ্যে কিছু ব্লগ রয়েছে। তবে এগুলি পড়ার পরেও আমি অবাক করে দিয়েছি যে আমাদের মডিউলগুলিতে থাকা পুরানো বিশ্বস্ত @ প্রোভাইডগুলির এতে কী লাভ।

যেহেতু আমার লক্ষ্য বিষয়গুলি যতটা সম্ভব পরিষ্কার করা, সুতরাং আমি নিজের তদন্ত করার পরে এটি এইভাবে লিখছি যাতে আমার প্রশ্নগুলি পরিষ্কার হয়।

কোডিংয়ের ক্ষেত্রে কী আলাদা

@Provides

@Module
ক্লাস মাইমডুল {
    @Provides
    মজা getInjectClass (injectObject: InjectClass): InjectInterface {
        ইনজেক্টঅজেক্ট ফেরত দিন
    }
}
ক্লাস ইনজেকশন ক্লাস @ ইনজেক্ট কনস্ট্রাক্টর (): ইনজেকশন ইন্টারফেস
ইন্টারফেস ইনজেকশন ইন্টারফেস

@Binds

@Module
বিমূর্ত ক্লাস মাইমডুল {
    @Binds
    বিমূর্ত মজা getInjectClass (ইনজেক্টবজেক্ট: ইনজেক্টক্লাস):
        InjectInterface
}
ক্লাস ইনজেকশন ক্লাস @ ইনজেক্ট কনস্ট্রাক্টর (): ইনজেকশন ইন্টারফেস
ইন্টারফেস ইনজেকশন ইন্টারফেস

উপরের দিক থেকে, @ প্রাইভাইডগুলিতে ওপরে @Binds এর কোনও সুস্পষ্ট সুফল নেই। একজনের একটি বিমূর্ত শ্রেণি এবং ক্রিয়ায় পরিণত হয়েছে, অন্যটি একটি কংক্রিটের। এটি কোনও ভার্বোসিটি (বা বয়লারপ্লেট) হ্রাস করে না।

তাহলে @ বিন্ডসের সুবিধা কী?

এটি জানতে, আসুন কিছু ইতিহাস দেখুন look

ঐতিহাসিকভাবে ...

ডাগারের খুব খুব প্রাথমিক পর্যায়ে, @ মডুলের মতো কোনও জিনিস নেই। @ মডিউল আসলে ডাগার 2 কাজ করার জন্য প্রয়োজন হয় না (বিশ্বের সবচেয়ে ছোট ড্যাজার 2 কোড পরীক্ষা করে দেখুন)।

তবে লোকেরা অভিযোগ করে এবং সম্পর্কিত নির্ভরশীলদের একসাথে গ্রুপ করতে চেয়েছিল। সুতরাং ড্যাজার 2 বিকাশকারী এই জনপ্রিয় বৈশিষ্ট্য কল @ মডুলিটি দিয়েছেন এবং এটি তৈরি করেছেন যা এটির সুবিধাগুলি অনেকের কাছে চেয়েছিল।

তবুও, @ প্রচারের সাথে @ মডুলের অস্তিত্ব উত্পন্ন কোডটিতে কিছু ওভারহেড প্রবর্তন করে। সুতরাং @ বিন্ডসটিকে সাহায্য করার জন্য চালু করা হয়েছিল।

আমার কাছে প্রমাণ কর…

উপরের কোডটি ব্যবহার করে (এক সাথে @ কম্পোনেন্টের সাথে যা উপরের কোড স্নিপেটে দেখানো হয়নি)… আসুন ভিন্ন পরীক্ষা করা যাক

অতিরিক্ত মডিউল কারখানা ক্লাস

নীচে ক্লাস উত্পন্ন হয়।

নোট করুন যে @ প্রোভাইডগুলি MyModule_GetInjectClassFactory শ্রেণি উত্পন্ন করে, যা @ বিন্ডগুলিতে নেই

ক্লাসটি কেমন দেখাচ্ছে? বাহ, বেশ কয়েকটি কোড ..

তদ্ব্যতীত, এটি কেবল একটি ইনজেক্টক্লাসের জন্য। তবে আমাদের মডিউলে যদি তাদের 1 টিরও বেশি থাকে তবে তাদের প্রত্যেকেরই একটি কারখানা শ্রেণি তৈরি করা হবে

@Provides
মজা getInjectClass (injectObject: InjectClass): InjectInterface {
    ইনজেক্টঅজেক্ট ফেরত দিন
}
@Provides
মজা getInjectClass2 (injectObject2: InjectClass2): InjectInterface2
    ইনজেক্টঅবজেক্ট 2 রিটার্ন করুন
}
@Provides
মজা getInjectClass3 (injectObject3: InjectClass3): InjectInterface3
    ইনজেক্টঅবজেক্ট 3 রিটার্ন করুন
}

কীভাবে এটি আমাদের ডেক্সকাউন্ট এবং অ্যাপ্লিকেশনটির আকারকে যুক্ত করবে!

মডিউল মোড়কের অতিরিক্ত স্তর

অতিরিক্ত মডিউল ফ্যাক্টর শ্রেণি ব্যতীত, আমরা যদি তৈরি আমাদের ডাগারমাইকম্পোনমেন্ট ক্লাসটি পরীক্ষা করে দেখি তবে আমরা কোডের আকারটি ভিন্ন দেখতে পাই।

গোলাপি কেবলমাত্র @ প্রচারগুলিতে থাকে তবে সবুজ কেবলমাত্র @Binds এ থাকে

@ প্রোভাইডগুলি 52 লাইন কোড উত্পন্ন করে এবং @ বিন্ডগুলি 29 টি লাইন কোড উত্পন্ন করে (40% হ্রাস !!)।

আপনি যদি কোডটি সন্ধান করেন তবে নীচের মত প্রবাহটি দেখতে পাবেন।

ইনজেক্টঅবজেক্ট তৈরিতে @ সংক্ষেপে কতটা সংক্ষিপ্ত তা দেখুন?

সংক্ষেপে, কেবলমাত্র @Binds লাইনের সংখ্যা হ্রাস করে না, এটি অপারেশন প্রবাহের পাশাপাশি অবজেক্টের সৃষ্টিও হ্রাস করে।

তাহলে আসুন @ বিন্ডসে সবকিছু পরিবর্তন করা যাক?

দুর্ভাগ্যক্রমে, @ বিন্ডগুলি কেবল নীচের নিয়মের ভিত্তিতে কাজ করে

@ বিন্ডস পদ্ধতিতে কেবলমাত্র একটি প্যারামিটার থাকতে হবে যার প্রকারটি রিটার্ন টাইপের জন্য নির্ধারিত

সুতরাং শুধুমাত্র একটি একক প্যারামিটার এবং টাইপ রিটার্নটি সাধারণত প্রদত্ত প্যারামিটার অবজেক্টের ইন্টারফেস।

এই কথাটি বলার পরে, অন্যান্য টিপসগুলি @ প্রোভাইডগুলির জন্য স্থির ফাংশন ব্যবহার করার বিষয়ে বিবেচনা করা হচ্ছে যা কিছু উত্পন্ন কোডগুলি হ্রাস করতে সহায়তা করবে।

আরও অন্তর্দৃষ্টি পেতে নীচের ব্লগের অংশ 1 টি দেখুন

আমি আশা করি এই পোস্টটি আপনার জন্য সহায়ক হবে। আপনি আমার অন্যান্য আকর্ষণীয় বিষয়গুলি এখানে পরীক্ষা করতে পারেন।

অল্প অল্প পরামর্শ এবং অ্যান্ড্রয়েড, কোটলিন ইত্যাদি সম্পর্কিত বিষয়ে শেখার জন্য মিডিয়াম, টুইটার বা ফেসবুকে আমাকে অনুসরণ করুন। ~ Elye ~