Izax
Izax
خواندن ۲ دقیقه·۵ سال پیش

Dagger 2 ___ Part 1

قبل از تشریح این کتابخانه لازم که دو تا سوال مهم مطرح بشه !

  1. به چه دردی میخوره و قرار چه دردی دوا کن ؟
  2. چرا این کتابخونه !؟

خب برای جواب به سوال اولمون باید سری به یکی از اصول مهندسی نرم افزار بزنیم ،اصلی به نام

Inversion of control

که به اختصار IoC هم میگن . اما این اصل چی میگه ؟! میگه بیا کنترل اشیا داخل برنامه و بخشی از نرم افزارو انتقال بده به بخشی مستقل و جداگانه (کنترل اشیا شمال new کردن و.. میشود) . خب اینکار چه فایده ای داره ؟

  1. جدا سازی اجرای یک بخش از پیاده سازی اون (بقیه مزایا از این مورد قابل استنتاج است)
  2. افزایش بحث ماژولاریتی
  3. آسان سازی بحث تست

خب برای پیاده سازی این اصل (IoC) در نرم افزار ما ،راه های مختلفی وجود دارد از جمله :

  1. ServiceLocator
  2. Factory Pattern
  3. Strategy Pattern
  4. Abstract Factory Pattern
  5. Template Method
  6. Dependency Injection

اما ما تو این آموزش با مورد 6 یعنی Dependency Injection سروکار داریم (کتابخانه مورد نظر ما در این دسته بندی قرار دارد) . Dependency Injection به اختصار DI گوییم .

کتابخانه های مختلفی برای پیاده سازی DI وجود دارد از جمله :

  1. Spring DI
  2. Google Guice
  3. PicoContainer
  4. Java EE6 CDI
  5. Dagger


نحوه عملکرد DI در مقابل روش سنتی(بدون رعایت اصل IoC)
نحوه عملکرد DI در مقابل روش سنتی(بدون رعایت اصل IoC)

اما نوبت میرسه به جواب سوال دوممون که در ابتدای آموزش مطرح شد !


چرا Dagger ؟

کتابخانه های مطرح شده مکانیزم های مختلفی برای پیاده سازی DI استفاده می کنند که برخی از کتابخانه ها به کمک مبحث Reflection اینکارو انجام میدن . اما Reflection چیه ؟ به طور خیلییی کوتاه قابلیتی است که به کمک اون میتونیم در زمان اجرا (Runtime) تغییراتی در کد جاوا برنامه ایجاد کنیم ! کههه یکی از مراحل اینکار Scan کردن کلاس جاواست که همین امر زمان و حافظه ای مصرف می کند در نهایت این عمل در گوشی های هوشمند که حافظه کمی دارند منظقی نیست ! (اگه متوجه نشدین اصلا مهم نیست ربطی به آموزش ما نداره ) اما Dagger با استفاده از Annotation Processing اینکارو در زمان کامپایل انجام میدهد که مشکلات سرعت پایین و اشغال حافظه در زمان اجرا را ندارد .

ادامه این آموزش به 2 بخش تقسیم میشه :

  1. تشریح کتابخانه Dagger 2
  2. مثالی با Dagger 2

موفق باشید .

inversion of controldependency injectionتزریق وابستگی
Software engineer
شاید از این پست‌ها خوشتان بیاید