حقن التبعيات (Dependency Injection) في كوكب Kawkab
يوفر إطار العمل كوكب Kawkab نظامًا مدمجًا وسهل الاستخدام لحقن التبعيات (Dependency Injection) بهدف إدارة الكائنات وخدمات التطبيق بطريقة منظمة، مما يعزز من القابلية للاختبار، وإعادة الاستخدام، وتقليل التكرار البرمجي.
ما هو حقن التبعيات؟
حقن التبعيات هو نمط تصميم برمجي يسمح بتمرير التبعيات اللازمة (مثل الكائنات والخدمات) إلى الفئات (Classes) بطريقة ديناميكية بدلاً من إنشائها داخل الفئة نفسها. هذا يعزز الفصل بين المكونات ويقلل التداخل بينها.
آلية حقن التبعيات في كوكب Kawkab
في كوكب Kawkab، يتم تنفيذ حقن التبعيات باستخدام مزيج من الوراثة من Inject
ووظيفة .inject()
. يتم توفير هذا النظام لدعم بنية تعتمد على الوحدات مع تسهيل إدارة الكائنات عبر التطبيق.
استخدام حقن التبعيات مع الخدمات (Services)
1. تعريف الخدمة
لإنشاء خدمة معتمدة على حقن التبعيات، يجب وراثة كل من BaseService
و Inject
.
import { BaseService, Inject, inherit } from "kawkab";
// تعريف خدمة WelcomeService
export class WelcomeService extends inherit(BaseService, Inject) {
/**
* إرجاع رسالة ترحيبية
* @returns {string} الرسالة الترحيبية
*/
message() {
return "Welcome to كوكب Kawkab Framework 🚀!";
}
}
2. استخدام الخدمة داخل وحدة التحكم (Controller)
لحقن الخدمة داخل وحدة تحكم، يتم استخدام وظيفة .inject()
الخاصة بالخدمة.
import { BaseController, inherit } from "kawkab";
import { WelcomeService } from "../services/welcome";
// وحدة تحكم تستخدم WelcomeService
export default class extends inherit(BaseController) {
constructor(private welcomeService = WelcomeService.inject()) {
super();
}
/**
* دالة GET لإرجاع رسالة الترحيب
* @returns {object} استجابة JSON
*/
async get() {
return {
status: true,
message: this.welcomeService.message(),
};
}
}
شرح العملية
-
إنشاء الخدمة:
يتم تعريف الخدمة باستخدام الوراثة منBaseService
وInject
. -
حقن الخدمة:
يتم استدعاء الخدمة باستخدام.inject()
، حيث يتم حقن الخدمة ديناميكيًا كوحدة جاهزة للاستخدام. -
استخدام الخدمة:
يمكن استدعاء وظائف الخدمة داخل وحدة التحكم أو أي وحدة أخرى.
فوائد حقن التبعيات في كوكب Kawkab
-
فصل المسؤوليات:
يتم عزل منطق الأعمال عن وحدات التحكم مما يجعل الكود أكثر تنظيمًا. -
إعادة الاستخدام:
يمكن استخدام نفس الخدمة في أكثر من مكان دون الحاجة إلى إعادة إنشائها. -
سهولة الاختبار:
يمكن استبدال التبعيات بخدمات وهمية (Mock Services) أثناء الاختبار. -
تقليل التكرار:
يتم إنشاء التبعيات مرة واحدة فقط ويتم حقنها عند الحاجة.
أفضل الممارسات لاستخدام حقن التبعيات
-
تنظيم الخدمات:
قم بتنظيم الخدمات في مجلدات خاصة، مثل/services
، لتسهيل الوصول والصيانة. -
الاعتماد على الوراثة:
وراثةInject
وBaseService
تُبسط إدارة الخدمات. -
الاستفادة من
.inject()
:
استخدم.inject()
للحصول على كائن الخدمة دون الحاجة إلى إنشائه يدويًا. -
اختبار الوحدات:
استبدل التبعيات بخدمات وهمية أثناء الاختبار لضمان تغطية سيناريوهات متعددة.
توضيح عملي
ملف الخدمة
import { BaseService, Inject, inherit } from "kawkab";
export class WelcomeService extends inherit(BaseService, Inject) {
message() {
return "Welcome to كوكب Kawkab Framework 🚀!";
}
}
ملف وحدة التحكم
import { BaseController, inherit } from "kawkab";
import { WelcomeService } from "../services/welcome";
export default class extends inherit(BaseController) {
constructor(private welcomeService = WelcomeService.inject()) {
super();
}
async get() {
return {
status: true,
message: this.welcomeService.message(),
};
}
}
النتيجة
{
"status": true,
"message": "Welcome to كوكب Kawkab Framework 🚀!"
}
الخلاصة
نظام حقن التبعيات (Dependency Injection) في كوكب Kawkab يُعد ميزة قوية لتبسيط إدارة التبعيات في التطبيقات. باستخدام أدوات مثل .inject()
والوراثة من Inject
، يمكنك إنشاء تطبيقات مرنة وسهلة الصيانة مع تقليل الجهد المبذول في إدارة التبعيات يدويًا.