Dagger چیست ؟

سلام در این مقاله به بررسی کتاب خانه Dagger می پردازیم و به صورت تخصصی بررسی می کنیم Dagger چیست ؟ اگر بخواهیم به صورت سریع به این کتاب خانه بپردازیم به منظور Dependency Injection یا تزریق وابستگی مورد استفاده قرار می گیرد در ادامه با ما همراه باشید تا مفهوم کلی Dependency Injection یا تزریق وابستگی یا به اختصار DI آشنا شوید.
 

Dagger چیست ؟

کتاب خانه Dagger به منظور تزریق وابستگی با Dependency Injection مورد استفاده قرار می گیرد Dagger ابتدا توسط توسعه دهندگان Square مورد توسعه قرار داد شد و در نهایت هم توسط google در حال پشتیبانی و بروزرسانی است (هر زمان چیزی خوبی باشد سروکله گوگل نیز پیدا می شود) و از همه نظر این کتاب خانه برای عمل تزریق وابستگی فوق العاده است و طولی نکشید که بیشتر برنامه نویسان از این کتاب خانه استفاده کردند Dagger الهام گرفته شده از فریم ورک های شبیه به خود است اما با امکاناتی بالا که برنامه نویس را مجاب می کند تا از Dagger استفاده کند.

هدف از Dependency Injection یا تزریق وابستگی چیست ؟

استفاده از DI یک آینده نگری است. همه ما میدانیم که احتمال تغییرات در سورس همیشه وجود دارد. پس نحوه کد نویسی در بهترین حالت خود, با کمترین تغییرات در آینده بیشترین کارایی را فراهم می نماید. در حالت های کد نویسی آشفته و بی برنامه ممکن است کوچکترین تغییری نیازمند بررسی و تغییر چندین کلاس و چندین فایل و چندین ماژول باشد. اما با برنامه ریزی این تغییرات به حداقل خود خواهد رسید علاوه بر آن مدیریت تغییرات را برای شما آسوده تر خواهد کرد.

Dagger و Dagger 2

Dagger 2 که در حال حاضر نیز توسط google مدیریت و توسعه پیدا می کند، از همان نسخه اولیه یا Dagger  منشعب شده است. در این فریمورک، برای شناسایی اشیاء وابسته، تزریق وابستگی‌ها و ایجاد گراف اشیاء از Annotation Processing استفاده می‌شود. پردازش Annotation ها در زمان همگردانی (کامپایل) صورت می‌پذیرد. در نتیجه، سرعت اجرای برنامه کاهش نمی‌یابد. به طور مثال اگر شما یک لیست بلند بالا داشته باشید بخواهید تمامی عکس ها ASynchronize لود شوند به صورت معمول با استفاده از رم زیاد گوشی امکان پذیر است ولی با Dagger 2 نیاز به رم آنچنان بالایی نیست.

علت پیچیدگی کار با Dagger یا Dagger 2 چیست ؟

واقعیت این است که هر شخص که برنامه نویسی می کند بعد از مدت شاید بتواند یک سبک یا شیوه برنامه نویسی را در اینترنت یا در هرجای دیگری تدریس کند و اینکه  روش های گوناگون پیاده سازی DI است که شاید بعضاً کار کند ولی از نظر DI درست نباشد و می توان با اطلاع  از این روش ها تسلط خوبی برآن پیدا کرد.
یک مثال ساده از Dagger که برای یک بچه 5 ساله قابل درک است ! (این متن ترجمه شده یک متن انگلیسی است و به عنوان بهترین روش برای منتقل کردن معنی مفهوم و Conecpt مربوطه به Dagger در MIT تدریس می شود)
متن انگلیسی برای دوستانی که تمایل دارند متن اصلی را مطالعه کنند.

When you go and get things out of the refrigerator for yourself, you can cause problems. You might leave the door open, you might get something Mommy or Daddy doesn’t want you to have. You might even be looking for something we don’t even have or which has expired.

What you should be doing is stating a need, “I need something to drink with lunch,” and then we will make sure you have something when you sit down to eat.

متن فارسی برای افرادی که حوصله فکر کردن ندارند.

وقتی که میخواهید چیزی از یخچال برای خودتان بردارید
ممکن است مشکلاتی به وجود بیاورید. برای مثال در یخچال را باز بگزارید. ممکن است چیزی رو بخواهید که والدین شما نخواهند آن را میل کنید. حتی ممکن است به دنبال چیزی باشید که نداشته باشید یا حتی فاسد شده باشد.
چیزی که باید انجام بدید . اظهار نیاز کردن است “من برای ناهار به یک چیزی برای نوشیدن نیاز دارم.” و در آن زمان ما مطمئن خواهیم شد که شما چیزی میل خواهید کرد.

 
شاید سوال اصلی این باشد که چرا باید از Dagger 2 استفاده کنیم ؟

  •  آن‌جایی که وابستگی اجزای برنامه از خود آن اجزاء جدا می‌شود، می‌‌توان در پروژه‌های دیگر دوباره از آن اجزاء استفاده کرد.
  • بعضی وقت‌ها لازم است فقط یک یا چند نمونه محدود از یک کلاس در برنامه وجود داشته باشد. مثلاً فرض کنید در یک آموزشگاه، مقرر شده که پیش از شروع هر جلسه درسی، یک تخته‌پاک‌کن در اختیار افراد قرار یگیرد و پس از پایان جلسه، آن تخته‌پاک‌کن دور انداخته شود. بنابراین ما هنگام آغاز شدن یک جلسه، باید یک شیء جدید از تخته‌پاک‌کن بسازیم. در طول برگزاری جلسه، هر فردی که بخواهد تخته را تمیز کند، تنها به همان تخته‌پاک‌کن دسترسی دارد و با پایان یافتن جلسه، عمر تخته‌پاک‌کن هم به پایان می‌رسد. به کمک Dagger ما می‌توانیم چرخه حیات اشیاء تخته‌پاک‌کن را به راحتی مدیریت کنیم. این کار یک مزیت مهم دیگر هم دارد: افراد کلاس از چرخه حیات تخته‌پاک‌کن‌ها مطلع نخواهند شد! در عین حال وابستگیِ آن‌ها تأمین می‌شود و در هنگام آغاز هر کلاس، خیال‌شان در مورد تخته‌پاک‌کن راحت است.
  • فرض کنید یک کلاس به پنج کلاس دیگر وابسته است و هر کدام از آن کلاس‌ها به چند کلاس دیگر وابستگی دارند. در صورت استفاده از Dagger، ترتیب ایجاد شدن اشیاء به طور کامل توسط این فریمورک مدیریت می‌شود. بنابراین اگر بخواهید برخی از این کلاس‌ها را تغییر دهید، از بروز برخی خطاهای احتمالی پیشگیری می‌شود.
  • Dagger باعث می‌شود وابستگی‌های تودرتو حذف شوند. فرض کنید چند شیء به طور سلسله مراتبی به یکدیگر وابسته‌اند؛ مثلاً A به B، B به C و C به D وابستگی دارد. در جریان اجرای برنامه، یک نمونه از شیء D در اختیار A قرار می‌گیرد. برای این‌که وابستگی شیء C تأمین شود، A ناچار می‌شود از طریق شیء B، شیء D را به دست C برساند. در نتیجه، یک ارتباط ناخواسته بین B و D به وجود می‌آید (B به D احتیاجی ندارد، اما به اجبار به آن وابسته می‌شود). به کمک Dagger می‌توان وابستگی شیء C را بدون دخالت B تأمین کرد.

 
در نهایت اگر باز متوجه Dagger نشدید هیچ مشکلی ندارد بهترین کار تست کردن پروژه هایی است که با Dagger توسعه داده شده هستند است (منظور Sample است) بعد از اینکه با نحوه کار Dagger آشنا شدید یکبار دیگر این متن را مطالعه کنید شاید بهتر آن را درک کردید. در مطالب بعدی مثال های مختلفی از Dagger قرار میدهیم.
 
این مقاله نیز به پایان رسید.
شاد و پیروز باشید.

مطالعه بیشتر