لماذا حقن التبعيات؟
اجعل التعليمات البرمجية قابلة للاختبار ونمطية
لماذا حقن التبعيات؟ درس مجاني في Android Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Android Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Android Academy 4 دروس في المجموع.
ما هو حقن الاعتماديات؟
يعني حقن الاعتماديات (DI) تزويد الكائن بما يحتاج إليه من الخارج، بدلًا من أن ينشئه بنفسه.
المشكلة: الاعتماديات الصلبة
عندما ينشئ الصنف اعتمادياته بنفسه، يصبح مرتبطًا بها ارتباطًا وثيقًا، ويصعب تغييره أو اختباره.
class UserViewModel {
private val repo = UserRepository(
ApiClient(), AppDatabase.get()
) // tightly coupled
}الحل: الحقن بدلًا من ذلك
مرّر الاعتماديات من خلال المُنشئ. لن يعود الصنف معنيًا بكيفية إنشائها.
class UserViewModel(
private val repo: UserRepository
) {
// repo supplied from outside
}الفائدة 1: قابلية الاختبار
في الاختبارات، يمكنك تمرير مستودع وهمي أو محاكٍ، وبذلك تختبر ViewModel من دون شبكة أو قاعدة بيانات حقيقية.
val vm = UserViewModel(FakeUserRepository())الفائدة 2: النمطية
بما أن الأصناف تعتمد على التجريدات، يمكنك تبديل التطبيقات — مثل واجهة API حقيقية مقابل بديل غير متصل — من دون تعديل المستهلك.
الاعتماد على الواجهات
اجعل الأصناف تعتمد على واجهة، لا على نوع ملموس. فهذا هو المفتاح للاستبدال بسهولة.
interface UserRepository {
suspend fun getUsers(): List<User>
}
class NetworkUserRepository(
private val api: ApiService
) : UserRepository { /* ... */ }الفائدة 3: المسؤولية الواحدة
تركّز الأصناف على مهمتها، لا على إنشاء الكائنات التي تتعاون معها. وينتقل إنشاء الكائنات إلى مكان مخصص لذلك.
يصبح الحقن اليدوي مُرهقًا
يمكنك تنفيذ DI يدويًا، لكن مع ازدياد حجم الرسم البياني ستضطر إلى ربط العديد من الكائنات يدويًا وتمريرها عبر المُنشئات. وهذا أمر ممل وعرضة للأخطاء.
val db = AppDatabase.get(context)
val api = ApiService.create()
val repo = NetworkUserRepository(api)
val vm = UserViewModel(repo)
// ...repeated everywhereاستخدام إطار DI
يؤتمت الإطار عملية الربط هذه. تعلن مرة واحدة عن كيفية إنشاء كل اعتماد، ثم ينشئ الرسم البياني بأكمله نيابةً عنك.
لماذا Hilt؟
يُعد Hilt إطار DI الموصى به لنظام Android. وهو مبني على Dagger، ويوفر مكونات قياسية ذات نطاقات مرتبطة بأصناف Android (Application وActivity وViewModel)، مع قدر أقل بكثير من الشيفرة المتكررة.
ما الذي يقدمه Hilt؟
- إنشاء تلقائي لرسم الاعتماديات البياني.
- نطاقات تراعي دورة الحياة.
- حقن سهل في Activities وFragments وViewModels.
تعمل الدروس التالية على إعداده.
تحقق سريع
اختبر مدى فهمك لحقن الاعتماديات.
مراجعة
لقد تعلمت:
- يوفر DI الاعتماديات من الخارج بدلًا من إنشائها داخليًا.
- يحسن قابلية الاختبار والنمطية وفصل المسؤوليات.
- اعتمد على الواجهات.
- لا يتوسع DI اليدوي جيدًا؛ أما Hilt فيؤتمته.
الأسئلة الشائعة
هل درس «لماذا حقن التبعيات؟» مجاني؟
نعم — نص درس «لماذا حقن التبعيات؟» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Android Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Android Academy 4 دروس في المجموع.
ماذا ستتعلم في «لماذا حقن التبعيات؟»؟
اجعل التعليمات البرمجية قابلة للاختبار ونمطية تتمرن على Android Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Android Academy؟
لا تُشترط خبرة سابقة. Android Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «لماذا حقن التبعيات؟»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Android Academy هذا؟
نعم. كل درس في Android Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- لماذا حقن التبعيات؟
- إعداد Hilt
- الوحدات وموفّرو التبعيات
- الحقن في ViewModels