در این مقاله، شما یاد خواهید گرفت که تزریق وابستگی (Dependecy Injection) چیست، اهمیت آن در اپلیکیشنهای اندرویدی چقدر است، چه روشهای برای انجام تزریق وابستگی (DI) وجود دارد و اینکه چگونه از تزریق وابستگی در اپلیکیشنهای اندرویدی استفاده کنیم.
ممکن است به این مقاله علاقهمند باشید: توسعه اپلیکیشن موبایل با کاتلین یا فلاتر؟
فهرست مطالب
مفهوم تزریق وابستگی (Dependency Injection)
برای درک بهتر مفهوم وابستگی در برنامهنویسی، اجازه دهید دو کلاس A و B را در نظر بگیریم که به شکل زیر تعریف شده است:
به کد بالا دقت کنید. همانطور که میبینید، کلاس A به کلاس B وابسته است و هرگونه تغییر در کلاس B میتواند کلاس A را نیز تحت تاثیر خود قرار دهد.
این روش تعریف کلاس A میتواند مشکلاتی به همراه داشته باشد:
- اگر تغییری در سازنده (Constructor) کلاس B اتفاق بیفتد، کلاس A را نیز باید تغییر دهیم و هر کجا که از کلاس B استفاده شده باشد، باید آنها را به روزرسانی کنیم تا مشکل کد ما حل شود
- حتما باید برای متغیر b فقط از کلاس B استفاده کنیم و نمیتوانیم از کلاس دیگری به جای آن استفاده کنیم
در کدنویسی بهینه، ما باید به اصل عدم وابستگی کلاس به کلاسی دیگر تا هر کجا که امکان داشته باشد، پایبند باشیم. زیرا این پایبندی باعث عدم وابستگی کلاسهای مختلف به یکدیگر میشود و در نتیجه کدنویسی سادهتر میشود و دست ما را برای توسعه بهتر اپلیکیشن باز میگذارد.
تزریق وابستگی (Dependecy Injection) چیست؟
برای حل مشکل وابستگی کلاسها از مفهوم تزریق وابستگی (DI) استفاده میکنند. Dependency Injection تکنیکی است که امکان ایجاد یک شی وابسته در خارج از کلاس را فراهم می کند و آن را به روش های مختلف در دسترس کلاس قرار میدهد. به کمک این روش وابستگیها در جایی خارج از کلاس اصلی تعریف میشود و بنابراین هرگونه تغییر در آن کلاس موجب تغییر در کلاس وابسته نخواهد شد. از این فریمورک میتوان در پلتفرمهای مختلف مانند پروژه اندروید و Ktor استفاده کرد.
بیشتر بخوانید: کاربرد Ktor در کاتلین چیست؟
فریمورک Kotlin Koin چیست؟
حال که به اهمیت تزریق وابستگی پی بردیم، میتوانیم به کمک فریمورکهای مختلفی این کار را انجام دهیم. یکی از فریمورکهای پرطرفدار Koin است. کوین یک DSL کم حجم، ساده و آسان برای یادگیری است. این فریمورک بسیار هوشمند و قوی ساخته شده است و به برنامهنویسان کمک میکند که به سادهترین روش Dependency Injection را به کمک زبان کاتلین انجام دهند.
بیشتر بخوانید: Coroutines چیست؟ آموزش کوروتین در اندروید
مقایسه Koin با Dagger
همانطور که احتمالا میدانید، Dagger نیز یک DI در زبان جاوا است که استفادههای بسیار گستردهای در این زبان دارد. واقعیت این است که هر فریمورکی معایب و مزایای خود را دارد و این دو فریمورک نیز از این قاعده مستثنا نیستند و هر کدام کاستیهایی را به همراه دارد. از نظر من استفاده از Koin میتواند بسیار راحتتر و سادهتر باشد. کدنویسی به کمک فریمورک کم حجم Koin بسیار سادهتر از Dagger است. برای نوشتن یک تزریق وابستگی ساده در Dagger باید کد بسیار زیادی نسبت به Koin بنویسید. همچنین Koin کد اضافی نیز تولید نمیکند. بنابراین پیشنهاد میکنیم از Koin به جای Dagger استفاده کنید.
شما میتوانید در کاتلین از هر دو فریمورک استفاده کنید و این کاملا به خود شما بستگی دارد. به هر حال نکته حائز اهمیت این است که بتوانید از روش تزریق وابستگی برای جداسازی وابستگیها از کلاسهای خود استفاده کنید تا بتوانید توسعه اپلیکیشنهای خود را راحتتر و سریعتر پیش ببرید.
بیشتر بخوانید: آموزش اندروید استودیو (Android Studio)
مراحل پیادهسازی Kotlin Koin
1. افزودن وابستگیهای مورد به gradle
ابتدا Dependecyهای مورد نیاز را به پروژه اضافه کنید. توجه داشته باشید که برای دانلود این وابستگیها باید از repository (مخزن) mavenCentral استفاده کنید.
2. تعریف کلاسها و وابستگیها
اکنون کلاسهای اصلی و وابسته خود را تعریف کنید. ما از این تعاریف کلاسها استفاده میکنیم که Student را به Course وابسته میکند.
3. تعریف ماژول Koin
کوین از ماژولها برای تعریف وابستگیها استفاده میکند. یک ماژول به شکل زیر بسازید:
- تابع
module همانطور که از اسمش پیداست، برای ساخت یک ماژول استفاده میشود single برای ساخت یک singleton استفاده میشود. به این معنا که فقط یکبار از آن آبجکت ساخته میشود و هر کجا که نیاز به بازگرداندن آن باشد، همان را برمیگرداند و یک آبجکت جدید برای آن ایجاد نمیکند- تابع
factory برعکس تابع single، وظیفه ساخت instanceهای جدید در هر زمانی که نیاز به بازگردانی یک آبجکت از آن کلاس باشد را انجام میدهد. به زبان ساده، هر زمان که آبجکتی از آن کلاس در factory خواسته شود، یک آبجکت جدید (instance) برای آن ساخته میشود و بازگردانی میشود.
4. اجرای Koin
اجرای Koin بسیار ساده است. کافیست کد زیر را در کلاس اصلی اپلیکیشن خود صدا بزنید:
ما از تابع
نتیجه گیری
در این مقاله، با مفهوم Dependency Injection آشنا شدیم و با فریمورک Koin که یک فریمورک تزریق وابستگی به زبان کاتلین است، آشنا شدیم. ما متوجه شدیم که چقدر استفاده و کار با فریمورک کوین آسان است. همچنین متوجه شدیم که Dependency Injection چگونه میتواند به ما در ساخت اپلیکیشنهای با ثباتتر کمک کند. Koin یک فریمورک بسیار کم حجم و ساده در یادگیری است که میتواند در توسعه اپلیکیشنهای شما کمک بسزایی کند. ما در این مقاله مبانی استفاده از کوین را توضیح دادیم و امیدواریم در آینده بتوانید از قابلیتهای آن در پروژههای خود استفاده کنید.