مقدمة عن Dagger 2

هذه المقاله تحتوي على جزئين :

الجزء الاول : يحتوي على مقدمه عن مفهوم dugger2 
الجزء الثاني : يحتوي على تنفيذ له مع مثال

 لفهم dugger2 في الاندرويد يجب ان نفهم في البدايه هذا السوال :

لماذا نحتاج   Dependency Injection ؟

 هو مبني علي مفهوم عكس السيطرة invertion if control الذي ينص علي ان الكلاس يجب ان يحصل علي dependency من الخارج وبكلمه اخرى لا يجب على الكلاس نشاء instances من كلاس اخر وانما يجب ان يحصل على instances  من كلاس مخصص

مثلا في جافا اذا تم انشاء كائن من خلال new هذا يعني ان الكلاس لايمكن استخدامها او اختبارها بشكل مستقل عن هذا الكلاس وهذا يسمى  hard dependency. الاعتماد الثابت

ما فائده توفير التبعيات خارج الكلاس ؟

من اهم الميزات هي امكانيه اعاده الاستخدام والاختبار بصوره منفرده مستقله عن باقي الكلاسات وهذا شيء مفيد جدا

الان بعد ان فهمنا قليلا دعونا نتجه الى di


والان  السؤال المهم كيف نستخدم  Dependency Injection ؟

لننظر الى الماضي 

يمكن ان يتم انشاء الكائن وحقنه الى الكلاس التابع وهذا يخلصنا من مشكلة الاعتماد الثابت ويمكن اختبار الكلاس بعزلة وذلك بيتخدام كائنات وهميه ( الكائنات المحقونه )
  

ولكن المشاكل هي : 
  1. يكون بطي بحد ذاته 
  2. يتم ارسال التبعيه في وقت التشغيل runtime وهذا قد يحصل امور غير متوقعة

هذا ادى الى ولاده dugger 2 من كوكل 
حيث يكون توليد رسم البياني للتبعيات بالستخدام annotation processor
و الكلاسات التي توفر التبعيات الان تتولد في وقت البناء build time  وذلك بستخدام حزمه حقن inject package
وهذا يوفر سهوله فحص قبل التشغيل 

Annotation Processor : هو وسيله لقراءه الملفات في وقت البناء build time لانشاء كود يستخدم في المشروع 

طرق الحقن :

  1. Constructor Injection : من خلال داله البناء 
  2. Field Injection : من خلال متغيرات على ان لا تكون private 
  3. Method Injection :  من خلال الدوال 
ترتيب التبعيات
  1. constructor
  2. field
  3. method



الان يمكن فهم dugger 2

يطلب مستهلك التبعيه (يطلب الكائن ) من موفر التبعيات dependency provider من خلال الموصل connector

  1. Dependency provider : هو كلاس معنون ب @Module مسؤول عن توفير الكائنات التي يمكن حقنها ويتم تحديد الدوال بستخدام @Provides الكائنات الراجعه منها متوفره لحقن التبعيه dependency injection.
  2. Dependency consumer : يتم استخدام @Inject  لتحديد التبعيه 
  3. Connecting consumer and producer :  تيم  @Component لانشاء تواصل بين الموفر والمستهلك وهذا الكلاس يتم انشاءه بواسطه dugger 2 

قيود dugger 2 :
  1. لا يتم الحقن اوتوماتيكيا 
  2. لا يمكن حقن الحقول private 
  3. اذا تريد ان نحقن نعرف داله من نوع  @Component وناخذ  instance من الكلاس الذي نريد الحقن به




























تعليقات

  1. https://blog.mindorks.com/introduction-to-dagger-2-using-dependency-injection-in-android-part-1-223289c2a01b#.j5elbi84n

    هذا هو المقال الاصلي

    ردحذف
  2. شكرا جدا لي مجهودك

    ردحذف

إرسال تعليق

المشاركات الشائعة من هذه المدونة

local function

Architecture patterns in Android part 1 - معماريه كتابه الكود في الاندرويد جزء 1