Dependency কী এবং কেন প্রয়োজন?

 


Dependency মানে হলো নির্ভরতা—একটি কোড বা সফটওয়্যার যখন অন্য একটি লাইব্রেরি, মডিউল, বা কোডের অংশের উপর নির্ভর করে, তখন সেটাই ডিপেন্ডেন্সি। সহজভাবে বললে, যদি আপনার অ্যাপের কিছু ফিচার কাজ করতে গেলে বাইরের কিছু কোড বা লাইব্রেরির প্রয়োজন হয়, তাহলে সেটাই আপনার ডিপেন্ডেন্সি


একটা মজার গল্প দিয়ে বোঝাই:

ধরুন, আপনি একটা দারুণ চা বানানোর প্ল্যান করছেন। কিন্তু চা বানাতে গেলে আপনাকে চা পাতা, দুধ, চিনি, পানি, এবং চুলা লাগবে। এখানে—

  • চা পাতা, দুধ, চিনি, পানি → আপনার ডিপেন্ডেন্সি

  • চুলা → রান করার প্ল্যাটফর্ম

  • আপনার হাতের কাজ → অ্যাকচুয়াল কোড

যদি দুধ বা চিনি না থাকে, তাহলে চা বানানো কঠিন হয়ে যাবে। ঠিক একইভাবে, যদি আপনার অ্যাপে প্রয়োজনীয় ডিপেন্ডেন্সিগুলো না থাকে, তাহলে সেটা সঠিকভাবে রান করবে না


অ্যান্ড্রয়েড ও গ্রেডলে ডিপেন্ডেন্সি ব্যবহারের কারণ

অ্যান্ড্রয়েড অ্যাপ ডেভেলপমেন্টে আমাদের অনেক দরকারি লাইব্রেরি ও ফাংশন থাকে যেগুলো বারবার লিখতে গেলে প্রচুর সময় লাগবে। তাই আমরা ডিপেন্ডেন্সি যোগ করি, যা মূলত অন্য কেউ তৈরি করেছে এবং আমরা সহজেই সেটা ব্যবহার করতে পারি।

উদাহরণ:

আপনার যদি Firebase Authentication দরকার হয়, তাহলে আপনি Firebase SDK ডিপেন্ডেন্সি যোগ করেন, যেমন—

implementation 'com.google.firebase:firebase-auth:22.1.0'

এটা যোগ করলেই Firebase Authentication কাজ করবে। আপনাকে Firebase-এর কোড নিজে বানাতে হবে না।


Dependency Management কিভাবে করা হয়?

অ্যান্ড্রয়েড অ্যাপে Gradle ব্যবহার করে ডিপেন্ডেন্সি ম্যানেজ করা হয়।

  • dependencies ব্লকের মধ্যে লাইব্রেরির নাম এবং ভার্সন উল্লেখ করতে হয়

  • Gradle এটা রিমোট রিপোজিটরি থেকে নামিয়ে নিয়ে আসে

  • আপনার অ্যাপে ইনস্টল এবং রান করিয়ে দেয়

📌 Dependency যোগ করার নিয়ম:

dependencies {
    implementation 'androidx.appcompat:appcompat:1.6.1' 
    implementation 'com.google.code.gson:gson:2.10.1'
}

এখানে androidx.appcompat এবং gson হলো ডিপেন্ডেন্সি লাইব্রেরি


Dependency এর ধরণ

ডিপেন্ডেন্সি বিভিন্ন রকম হতে পারে—

  1. Local Dependency:

    • আপনার নিজের তৈরি করা কোড বা মডিউল যদি অন্য একটি অংশ ব্যবহার করে, তাহলে সেটা লোকাল ডিপেন্ডেন্সি।

    • যেমন, আপনি নিজে একটা utility module বানিয়ে সেটাকে মেইন অ্যাপে ব্যবহার করছেন।

  2. Remote Dependency:

    • ইন্টারনেট থেকে লাইব্রেরি ইমপোর্ট করা হয়

    • যেমন, Retrofit, Glide, Firebase ইত্যাদি

  3. Transitive Dependency:

    • একটা ডিপেন্ডেন্সি যখন অন্য কোনো ডিপেন্ডেন্সির উপর নির্ভর করে, তখন তাকে Transitive Dependency বলে।

    • যেমন, Glide ইমপোর্ট করলে সেটা okhttpsupport-v4 এর উপর নির্ভর করে, তাই এগুলোও আপনার প্রোজেক্টে যোগ হয়।


Dependency Versioning (ভার্সন কন্ট্রোল)

প্রতিটি ডিপেন্ডেন্সির একটি নির্দিষ্ট ভার্সন থাকে। যেমন,

implementation 'com.squareup.retrofit2:retrofit:2.9.0'

এখানে 2.9.0 হলো Retrofit-এর ভার্সন। নতুন ভার্সন আসলে আপনাকে এটি আপডেট করতে হতে পারে।

📌 যদি সর্বশেষ ভার্সন ব্যবহার করতে চান, তাহলে plus (+) সাইন ব্যবহার করা উচিত নয়, কারণ এটা কোড ব্রেক করতে পারে।


Dependency সংক্রান্ত সমস্যা ও সমাধান

Dependency Conflict:
যদি একই লাইব্রেরির ভিন্ন দুটি ভার্সন যোগ হয়, তাহলে কনফ্লিক্ট হয়। সমাধান:

implementation ('com.example.library:1.2.3') {
    force = true
}

এটা দিয়ে নির্দিষ্ট একটি ভার্সন ব্যবহার বাধ্য করা যায়।

Missing Dependency:
কখনো কখনো ডিপেন্ডেন্সি ডাউনলোড না হলে অথবা অ্যাড না হলে, Gradle সিঙ্ক করতে হয়:
👉 Sync Now প্রেস করুন বা
👉 Rebuild Project করুন

Large APK Size:
অনেক ডিপেন্ডেন্সি অ্যাপের সাইজ বাড়িয়ে দেয়
সমাধান:

  • অপ্রয়োজনীয় ডিপেন্ডেন্সি রিমুভ করুন

  • ProGuardR8 ব্যবহার করুন


শেষ কথা

  • Dependency আমাদের কাজ সহজ করে, কারণ আমরা রেডিমেড কোড ব্যবহার করতে পারি

  • Gradle দিয়ে Dependency ম্যানেজ করা হয়

  • সঠিক Dependency ব্যবহারে অ্যাপ কম সাইজের হয়, ভালো পারফর্ম করে

  • Dependency কনফ্লিক্ট থেকে সাবধান থাকতে হয়

এখন Dependency নিয়ে ক্লিয়ার, তাই না? 😊

Dependency is the key and why is it needed?

Comments

Popular posts from this blog

AI (Artificial Intelligence) সহজভাবে বোঝার জন্য একদম মস্তিষ্ক-বান্ধব ব্যাখ্যা 🧠🤖

🧠 Regex কী?

Kotlin-এ ভেরিয়েবল ঘোষণা করার দুই উপায়