0Pricing
TypeScript Academy · درس

الحقن عبر المُنشئ

احقنوا التبعيات عبر المُنشئات بوضوح

الحقن عبر المُنشئ درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

الحقن عبر المُنشئ بالتفصيل

يعلن الحقن عبر المُنشئ كل تبعية باعتبارها معاملًا للمُنشئ. ويكون الكائن موصول التبعيات بالكامل لحظة وجوده، مما يجعل نسيان المكوّنات المتعاونة المطلوبة أمرًا مستحيلًا.

خصائص المعاملات

يمكن لـ TypeScript إعلان تبعية وتعيينها في خطوة واحدة باستخدام مُعدِّل وصول على المعامل. وتنشئ private readonly الحقل وتعيّنه تلقائيًا.

interface Mailer { send(to: string, body: string): void; }
class Notifier {
  constructor(private readonly mailer: Mailer) {}
}

التبعيات المعتمدة على الواجهات

يؤدي الاعتماد على واجهة بدلًا من فئة إلى فصل المستهلك عن أي تطبيق محدد. ويمكن توفير أي كائن يطابق الواجهة.

interface Mailer { send(to: string, body: string): void; }
class SmtpMailer implements Mailer {
  send(to: string, body: string) { console.log("SMTP ->", to); }
}

توصيل التبعيات في جذر التركيب

يُسمّى الموضع الذي ينشئ مخطط الكائنات جذر التركيب. وهناك تختار التطبيقات الملموسة وتحقنها.

class Notifier {
  constructor(private readonly mailer: Mailer) {}
  notify(to: string) { this.mailer.send(to, "hello"); }
}
const app = new Notifier(new SmtpMailer());
app.notify("a@b.com");

تبديل التطبيقات

بما أن التبعية واجهة، يمكنك توفير تطبيق مختلف تمامًا من دون لمس Notifier. وهذه هي المرونة الأساسية التي يوفرها حقن التبعيات.

class FakeMailer implements Mailer {
  sent: string[] = [];
  send(to: string) { this.sent.push(to); }
}
const fake = new FakeMailer();
new Notifier(fake).notify("x@y.com");
console.log(fake.sent); // ["x@y.com"]

الاختبار من دون عمليات إدخال وإخراج حقيقية

يتيح حقن أداة إرسال البريد الزائفة للاختبار التحقق مما كان سيُرسل، من دون إرسال بريد إلكتروني حقيقي. ويكون الاختبار سريعًا وحتميًا ومعزولًا.

const fake = new FakeMailer();
new Notifier(fake).notify("test@site");
console.log(fake.sent.length === 1); // true

تبعيات متعددة

أدرج عدد التبعيات الذي تحتاج إليه. فكل تبعية واضحة ومحددة النوع ومطلوبة، مما يجعل احتياجات الفئة ظاهرةً من النظرة الأولى.

interface Logger { log(m: string): void; }
class Notifier {
  constructor(
    private readonly mailer: Mailer,
    private readonly logger: Logger,
  ) {}
}

تمنع readonly إعادة الإسناد

يمنع وسم الحقول المحقونة بالخاصية readonly استبدالها أثناء عمر الكائن، ويحافظ على ثبات مكوّناته المتعاونة وإمكانية التنبؤ بها.

class Notifier {
  constructor(private readonly mailer: Mailer) {}
  // this.mailer = ... would be a compile error
}

لا تستخدم new مخفيًا في الداخل

يجب ألا تنشئ الفئة التي تستخدم الحقن عبر المُنشئ مكوّناتها المتعاونة داخليًا باستخدام new. إذ تصل جميع التبعيات عبر المُنشئ، مما يجعل الاقتران واضحًا.

التبعيات المطلوبة مقابل الاختيارية

ينبغي وضع التبعيات المطلوبة في المُنشئ. أما التبعيات الاختيارية فعلًا، فيمكن أن تستخدم تطبيقًا افتراضيًا لا ينفّذ شيئًا، مع تمريره من الخارج بدلًا من إنشائه في الداخل.

const noopLogger: Logger = { log() {} };
new Notifier(new SmtpMailer(), noopLogger);

خلاصة الفوائد

يجعل الحقن عبر المُنشئ التبعيات واضحة، والكائنات مهيّأة بالكامل، والتطبيقات قابلةً للتبديل، والاختبارات سهلة. ولذلك فهو أسلوب حقن التبعيات الافتراضي لسبب وجيه.

اختبار سريع

اختبار سريع حول هذا الدرس.

خلاصة

يعلن الحقن عبر المُنشئ التبعيات بصفتها معاملات، وغالبًا ما تكون private readonly، وتُحدَّد أنواعها بواسطة واجهة. ويختار جذر التركيب التطبيقات، بينما تمرّر الاختبارات كائنات زائفة. وتكون الكائنات موصولة التبعيات دائمًا، كما يمكن تبديل المكوّنات المتعاونة من دون تعديل الفئة.

الأسئلة الشائعة

هل درس «الحقن عبر المُنشئ» مجاني؟

نعم — نص درس «الحقن عبر المُنشئ» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

ماذا ستتعلم في «الحقن عبر المُنشئ»؟

احقنوا التبعيات عبر المُنشئات بوضوح تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟

لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «الحقن عبر المُنشئ»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟

نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات عكس التحكم
  2. الحقن عبر المُنشئ
  3. حاويات DI باستخدام InversifyJS
  4. رموز الخدمات الآمنة نوعيًا
← العودة إلى TypeScript Academy