آشنایی با Dagger Hilt: کتابخانه تزریق وابستگی برای توسعه برنامههای اندروید
Hilt یک ابزار قدرتمند برای تزریق وابستگی در برنامههای اندروید است که بر پایه Dagger ساخته شده است. با استفاده از انوتیشن ها و تولید کد در زمان کامپایل، Hilt فرایند تزریق وابستگی را سادهتر و قابل فهمتر میکند و کدی قابل تست، قابلیت تغییر و بهبود قابلیت تکرار استفاده را فراهم میکند.
“ما را در اینستاگرام دنبال کنید”
در این مقاله از سری مقالات برنامه نویسی اندروید اومدیم در مورد Hilt در اندروید ، صحبت کنیم. پس با سایت ترولرن همراه باش.
“قبل از شروع مقاله، بگم که بعد از مطالعه این مطلب، از آموزش پروژه محور برنامه نویسی اندروید سایتمون یعنی دوره ژنرال اندروید غافل نشید.”
توی دوره ژنرال صفر تا صد زبان Hilt در اندروید رو در یک فصل کامل توضیح دادیم و همچنین توی پروژه های دیجی کالا و اسنپ فود به صورت عملی و پروژه محور از Hilt استفاده کردیم و بطور کامل اون رو آموزش دادیم.
Hilt چیست؟
Hilt یک کتابخانه تزریق وابستگی (Dependency Injection) برای برنامههای اندروید است که توسط Google توسعه داده شده است. این کتابخانه بر اساس کتابخانهی Dagger که نیز توسط Google توسعه داده شده، ساخته شده است.
هدف اصلی Hilt ارائه روشی سادهتر و بهینهتر برای استفاده از تزریق وابستگی در برنامههای اندرویدی است.
تزریق وابستگی الگویی است که در آن وابستگیهای یک کلاس به صورت خارجی به آن تزریق میشوند، به جای اینکه کلاس خودش مسئول ایجاد وابستگیهای خود باشد. این الگو باعث میشود کد قابل تستتر، قابلیت تغییر و بهبود قابلیت تکرار استفاده را داشته باشد.
هیلت با استفاده از انوتیشن ها (Annotation) و تولید کد در زمان کامپایل، فرایند تزریق وابستگی را سادهتر میکند. شما میتوانید با تعریف انوتیشن ها در کلاسها و کامپوننتهای مختلف مانند Activity، Fragment، Service، ViewModel و غیره، وابستگیهای مورد نیاز خود را مشخص کنید. سپس Hilt کدهای مربوطه را برای تزریق وابستگی به صورت خودکار تولید میکند.
Hilt به عنوان یک افزونه بر Dagger عمل میکند و قابلیتهای Dagger را گسترش میدهد. Dagger یک کتابخانه تزریق وابستگی جامع برای جاوا و کاتلین است که توسط Google توسعه داده شده و در سطح کد میزبان به صورت کاملاً صریح استفاده میشود. با استفاده از Dagger، تزریق وابستگیها بر اساس الگوی تزریق سازنده (Constructor Injection) و تزریق فیلد (Field Injection) انجام میشود.
Hilt امکان استفاده از این الگوها را فراهم میکند و علاوه بر آن، با استفاده از انوتیشن ها و تولید کد در زمان کامپایل، فرایند تزریق را سادهتر میکند.
برای استفاده از Hilt، باید از تنظیمات مورد نیاز در فایل gradle خود استفاده کنید. سپس با تعریف کامپوننت اصلی (Main Component) که مسئولیت تزریق وابستگیهای اصلی برنامه را بر عهده دارد، شروع به کار میکنید.
سپس با تعریف کامپوننتهای فرعی (Subcomponent) میتوانید وابستگیهای موردی را در بخشهای مختلف برنامه تزریق کنید.
مزایای Hilt
Hilt دارای مزایا و فوایدی است که روند تزریق وابستگی در برنامههای اندروید را سادهتر و بهینهتر میکند. برخی از مزایای Hilt عبارتند از:
سادگی استفاده
در Hilt با استفاده از انوتیشن ها و تولید کد در زمان کامپایل، فرایند تزریق وابستگی را سادهتر میکند. شما با تعریف انوتیشن ها در کدهای خود، وابستگیهای خود را مشخص میکنید و Hilt کدهای مربوطه را برای تزریق وابستگی به صورت خودکار تولید میکند. این سبب میشود که نیازی به نوشتن کدهای تزریق وابستگی به صورت دستی نداشته باشید و فرایند تزریق را بهبود بخشید.
سازگاری با Dagger
هیلت به عنوان افزونهای بر Dagger عمل میکند و قابلیتهای Dagger را گسترش میدهد. Dagger یک کتابخانه قدرتمند برای تزریق وابستگی است که نیز توسط Google توسعه داده شده است.
با استفاده از Hilt، شما میتوانید از قابلیتها و الگوهای تزریق وابستگی در Dagger بهرهبرداری کنید و در عین حال با سادگی و قابلیتهای اضافی Hilt، فرایند تزریق را بهبود دهید.
کاربری در برنامههای اندروید
هیلت به طور خاص برای برنامههای اندروید توسعه داده شده است و به طور مستقیم با مولفههای اصلی اندروید مانند Activity، Fragment، ViewModel و غیره سازگاری دارد.
این به شما امکان میدهد که وابستگیهای مورد نیاز خود را در هر بخش از برنامه تزریق کنید و از قابلیتهای تزریق وابستگی در برنامههای اندرویدی خود بهرهبرداری کنید.
امکان تست و حاشیهنویسی
با استفاده از تزریق وابستگی با Hilt، کد شما قابل تست و حاشیهنویسی میشود. شما میتوانید به سادگی وابستگیهای جعلی (Mock) را برای تست واحدها (Unit Testing) استفاده کنید و از نیاز به اجرای برنامه در محیطهای واقعی برای تست کامپوننتها خود صرفهجویی کنید.
بهبود قابلیت تکرار استفاده و قابلیت تغییر
با استفاده از تزریق وابستگی با Hilt، کد شما پیچیدگی کمتری خواهد داشت. این باعث میشود که قابلیت تکرار استفادهی بالا و قابلیت تغییر مناسبی در کد شما ایجاد شود.
همچنین، با تمرکز بر تزریق وابستگی، ارتباط کلاسها و ماژولها بهبود مییابد و به شما امکان میدهد به راحتی تغییراتی را در ساختار برنامهی خود ایجاد کنید بدون اینکه بخشهای دیگر را تحت تأثیر قرار دهید.
به طور کلی، Hilt با ارائهی روشهای سادهتر و کارآمدتر برای تزریق وابستگی، کدنویسی را سادهتر و بهبود میبخشد، قابلیت تست و تغییر را تسهیل میکند و بهبود قابلیت تکرار استفاده را فراهم میکند.
معایب Hilt
با توجه به معرفی Hilt و مزایا و فواید آن، برخی از معایب Hilt عبارتند از:
محدودیت
Hilt توسط Google توسعه داده شده است و در حال حاضر در حال رشد و توسعه است. این بدین معنی است که ممکن است برخی از ویژگیها و قابلیتهایی که در کتابخانههای تزریق وابستگی دیگر وجود دارد، در Hilt وجود نداشته یا کاملاً پشتیبانی نشود.
این ممکن است برخی از توسعه دهندگان را محدود کند و نیازمندی به استفاده از کتابخانههای تزریق وابستگی دیگر باشد.
کامپایل و زمان اجرا
استفاده از Hilt ممکن است زمان کامپایل برنامه را تحت تأثیر قرارد قرار دهد. چون Hilt در زمان کامپایل کدها اقدام به تولید کد میکند، ممکن است زمان کامپایل برنامهها افزایش یابد.
به طور کلی، Hilt نیز همچون هر فریمورک و کتابخانه دیگری دارای معایبی است. برای تصمیمگیری در مورد استفاده از Hilt در پروژه خود، باید مزایا و معایب آن را با نیازها و شرایط خاص خودتان مقایسه کنید و از نظر کلیت پروژه، استفاده از Hilt برای شما مناسب است یا خیر را بسنجید.
در زیر یک مثال کامل از استفاده از Kotlin Flow، Hilt، MVVM ، ViewModel و Repository در یک برنامه اندروید آمده است:
در ابتدا، به فایل build.gradle (شاخه پروژه) خود، کدهای زیر را اضافه کنید:
buildscript { // ... dependencies { // ... classpath 'com.google.dagger:hilt-android-gradle-plugin:2.38.1' } } allprojects { // ... repositories { // ... mavenCentral() } }
سپس، به فایل build.gradle (شاخه ماژول) مربوط به برنامهی اصلی خود، کدهای زیر را اضافه کنید:
apply plugin: 'kotlin-kapt' apply plugin: 'dagger.hilt.android.plugin' android { // ... } dependencies { // ... implementation 'androidx.hilt:hilt-navigation-compose:1.0.0-alpha03' kapt 'com.google.dagger:hilt-android-compiler:2.38.1' implementation 'com.google.dagger:hilt-android:2.38.1' }
سپس، در کلاس برنامه اصلی (Application)، هیلت را فعال کنید:
@HiltAndroidApp class MyApp : Application() { // ... }
سپس، در کلاس ViewModel، از HiltViewModel استفاده کنید:
@HiltViewModel class MainViewModel @Inject constructor(private val repository: DataRepository) : ViewModel() { // ... }
در کلاس فعالیت (Activity)، از setContent روی Composeدهی کنید و ViewModel را با استفاده از hiltViewModel() ایجاد کنید:
@AndroidEntryPoint class MainActivity : AppCompatActivity() { private val viewModel: MainViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val data: List<Data> by viewModel.data.observeAsState(emptyList()) // استفاده از دادهها در Composeدهی } } // ادامه کدهای فعالیت }
در این مثال، با استفاده از HiltViewModel و hiltViewModel()، ViewModel به طور خودکار تزریق میشود و میتوانیم از ViewModel در Composeدهی استفاده کنیم.
لازم به ذکر است که برای استفاده از Hilt، باید تمام کلاسهایی که وابستگیها را دریافت میکنند (مانند ViewModel و Repository) با Annotation @Inject مشخص شوند. همچنین، برای استفاده از Compose نیاز به اضافه کردن کتابخانههای مربوطه و تنظیمات مربوطه در فایل build.gradle دارید.
حرف آخر
در نهایت، با استفاده از هیلت در برنامههای اندروید، شما قادر خواهید بود به صورت سادهتر و منظمتر وابستگیهای خود را تزریق کنید. با استفاده از Annotationهای هیلت، میتوانید به راحتی وابستگیها را تعریف کنید و Hilt آنها را به صورت خودکار برای شما مدیریت کند. همچنین، Hilt با ساختارهای اندرویدی مانند Activity و Fragment و ViewModel و Jetpack Compose هماهنگی دارد و امکان تزریق وابستگی در این ساختارها را فراهم میکند. با استفاده از Hilt، میتوانید کدی سازگار، قابل تست و قابل توسعه ایجاد کنید و فرآیند توسعه برنامههای اندروید را سریعتر و آسانتر کنید.
و همچنین ممنون میشم از طریق ستارههای این پایین به این مقاله امتیاز بدی و اگه هر سوالی داشتی توی قسمت دیدگاه بپرس و قطعا بهت پاسخ میدیم.
1 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.