أساسيات عكس التحكم
افهموا سبب ووقت عكس التبعيات
أساسيات عكس التحكم درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
التبعيات المضمّنة مباشرة
عندما تنشئ الفئة مكوّناتها المتعاونة بنفسها باستخدام new، تصبح مرتبطة ارتباطًا وثيقًا بهذه الأنواع الملموسة. ويجعل ذلك إعادة تهيئة الفئة واختبارها أمرًا صعبًا.
مثال على اقتران وثيق
تنشئ الخدمة هنا أداة تسجيل السجل بنفسها. ولا توجد طريقة لاستبدال أداة التسجيل بأخرى من دون تعديل الفئة.
class ConsoleLogger { log(m: string) { console.log(m); } }
class OrderService {
private logger = new ConsoleLogger(); // hard-coded
place() { this.logger.log("order placed"); }
}
new OrderService().place();ما عكس التحكم؟
يقلب عكس التحكم (IoC) الجهة التي تقرر التبعيات. فبدلًا من أن تنشئها الفئة، يوفّرها شيء خارجي. وتعلن الفئة ما تحتاج إليه ثم تستلمه.
حقن التبعيات
يُعد حقن التبعيات (DI) الطريقة الشائعة لتحقيق عكس التحكم: إذ تمرّر المكوّنات المتعاونة بدلًا من إنشائها داخليًا. ويتحكم المستدعي في التطبيق المستخدم.
النسخة التي تعتمد على الحقن
تُزوَّد أداة تسجيل السجل الآن من الخارج. ولم تعد الخدمة تعرف أي أداة تسجيل ملموسة تلقتها أو تهتم بها.
class OrderService {
constructor(private logger: { log(m: string): void }) {}
place() { this.logger.log("order placed"); }
}
new OrderService(new ConsoleLogger()).place();لماذا يحسّن عكس التحكم قابلية الاختبار؟
بما أن التبعيات تأتي من الخارج، يمكن للاختبارات تمرير كائنات زائفة أو أدوات تجسس. ويمكنك التحقق من السلوك من دون عمليات إدخال وإخراج أو قواعد بيانات أو استدعاءات شبكة حقيقية.
const calls: string[] = [];
const fakeLogger = { log: (m: string) => calls.push(m) };
new OrderService(fakeLogger).place();
console.log(calls); // ["order placed"]اعتمد على التجريدات
يعمل عكس التحكم بأفضل صورة عندما تعتمد الفئات على واجهة بدلًا من فئة ملموسة. ويمكن حقن أي تطبيق يستوفي الواجهة.
interface Logger { log(m: string): void; }
class OrderService {
constructor(private logger: Logger) {}
}الحقن عبر المُنشئ
يمرّر الحقن عبر المُنشئ التبعيات بصفتها معاملات للمُنشئ. وتصبح هذه التبعيات متاحةً فورًا، ويمكن وسمها بالخاصية readonly، مما يوضح أنها مطلوبة.
class OrderService {
constructor(private readonly logger: Logger) {}
}الحقن عبر الخاصية
يعيّن الحقن عبر الخاصية تبعيةً في خاصية عامة أو قابلة للتعيين بعد الإنشاء. وهو أكثر مرونة، لكنه يسمح بوجود الكائن مؤقتًا من دون التبعية.
class OrderService {
logger!: Logger; // set after construction
place() { this.logger.log("placed"); }
}
const s = new OrderService();
s.logger = new ConsoleLogger();اختيار الأسلوب
فضّل الحقن عبر المُنشئ للتبعيات المطلوبة، لأن الكائن لا يكون أبدًا في حالة إنشاء غير مكتملة. واستخدم الحقن عبر الخاصية للمكوّنات المتعاونة الاختيارية أو لكسر دورات الإنشاء.
لمحة عن حاويات IoC
في التطبيقات الكبيرة، يصبح توصيل التبعيات يدويًا أمرًا مرهقًا مع ازدياد الحجم. وتؤتمت حاوية IoC إنشاء التبعيات وتوفيرها، وهو ما تستكشفه الدروس التالية باستخدام InversifyJS.
اختبار سريع
اختبار سريع حول هذا الدرس.
خلاصة
ينقل عكس التحكم إنشاء التبعيات إلى خارج الفئة، بينما يوفّرها حقن التبعيات داخلها. اعتمد على الواجهات، وفضّل الحقن عبر المُنشئ للتبعيات المطلوبة، واستفد من سهولة الاختبار عبر حقن كائنات زائفة.
تعلم TypeScript مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 101
- الدروس
- 352
الأسئلة الشائعة
هل درس «أساسيات عكس التحكم» مجاني؟
نعم — نص درس «أساسيات عكس التحكم» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
ماذا ستتعلم في «أساسيات عكس التحكم»؟
افهموا سبب ووقت عكس التبعيات تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «أساسيات عكس التحكم»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.