في العدد الأخير، ناقشنا تصميم مكون إدارة قائمة الانتظار وأعطيناه اسمًا بارزًا وفريدًا: قائمة الانتظار الذكية. وهذه المرة، سنضع نتائج التصميم السابقة موضع التنفيذ وننفذها باستخدام التعليمات البرمجية.
أولاً، نحتاج إلى النظر في تخطيط الملف المصدر، أي تحديد كيفية تقسيم الكود إلى ملفات مستقلة. لماذا تفعل هذا؟ هل تذكر في نهاية العدد الأخير أنني ذكرت أن هذا المكون سيستخدم "رمزًا خارجيًا"؟ ومن أجل تمييز الغرض من الكود، تقرر تقسيم الكود إلى جزأين على الأقل: ملف الكود الخارجي وملف Smart Queue.
يعد التمييز بين الأغراض أمرًا واحدًا فقط، وثانيًا، يعد توزيعها في ملفات مستقلة مفيدًا لصيانة التعليمات البرمجية. تخيل أنك قررت يومًا ما في المستقبل إضافة بعض الوظائف الموسعة الجديدة إلى الوظائف الأساسية الحالية لإدارة قائمة الانتظار، أو تجميعها في مكون ينفذ مهمة محددة، ولكنك تريد الحفاظ على الوظائف الحالية (التنفيذ الداخلي) والاتصال الطريقة (الواجهة الخارجية) تظل دون تغيير، فإن كتابة الكود الجديد في ملف منفصل هو الخيار الأفضل.
حسنًا، في المرة القادمة التي سنركز فيها على موضوع تخطيط الملف، فلنصل الآن إلى صلب الموضوع. الخطوة الأولى، بالطبع، هي إنشاء مساحة الاسم الخاصة بالمكون، وسيتم تقييد كافة التعليمات البرمجية للمكون إلى مساحة الاسم ذات المستوى الأعلى:
var SmartQueue = window.SmartQueue ||.
SmartQueue.version = '0.1';
أثناء التهيئة، إذا واجهت تعارضًا في مساحة الاسم، فاسحبه واستخدمه. عادة ما يكون سبب هذا التعارض هو الإشارة المتكررة إلى رمز المكون، لذا فإن "السحب" سيعيد كتابة الكائن بنفس التنفيذ، وفي أسوأ الحالات، إذا كان هناك كائن آخر على الصفحة يسمى أيضًا SmartQueue، فهذا أمر محرج، سأفعل ذلك. تجاوز التنفيذ الخاص بك - إذا لم يكن هناك أي تعارضات أخرى في التسمية، فيمكن تشغيل المكونين دون وقوع أي حادث. أعطه أيضًا رقم الإصدار.
بعد ذلك، قم بإنشاء ثلاث قوائم انتظار لـ SmartQueue وفقًا لثلاث أولويات:
var Q = SmartQueue.Queue = [[], [], []];
كل منها عبارة عن مصفوفة فارغة لأنه لم تتم إضافة أي مهام بعد. وبالمناسبة، قم بإنشاء "اختصار" له إذا كنت تريد الوصول إلى المصفوفة لاحقًا، فما عليك سوى كتابة Q[n].
بعد ذلك، تظهر مهمة بطل الرواية بشكل رائع - يتم تعريف كيفية إنشاء مهمة جديدة هنا:
لن أخوض في التفاصيل المحددة بالداخل مع التعليقات الضرورية، بشكل عام يمكن أن تكون التعليمات البرمجية الخاصة بنا موصوفة ذاتيًا، وينطبق الشيء نفسه على الرموز اللاحقة. هنا نخبر العميل (المستخدم): إذا كنت تريد إنشاء مثيل SmartQueue.Task جديد، فيجب عليك تمرير معلمة واحدة على الأقل إلى هذا المُنشئ (يمكن حذف الثلاثة الأخيرة للمعالجة الافتراضية)، وإلا سيتم طرح استثناء.
ولكن هذا لا يكفي في بعض الأحيان، يرغب العملاء في استنساخ مثيل جديد من مهمة موجودة، أو إصلاح "جسم سليم" (مثيل كائن مهمة حقيقي) من "جسم معطل" (كائن به بعض سمات المهمة)، عن طريق. طريقة البناء المذكورة أعلاه غير مريحة بعض الشيء - يجب على العميل أن يكتب على النحو التالي:
var Task1 = new SmartQueue.Task(obj.fn, 1, '', obj.dependeency);
المصدر: Alipay UED
فار T = SmartQueue.Task = وظيفة(fn، المستوى، الاسم، التبعيات) {
إذا (نوع الجبهة الوطنية!== الدالة) {
رمي خطأ جديد ("نوع الوسيطة غير صالح: fn.")؛
}
this.fn = fn;
this.level = _validateLevel(level)؟ المستوى: LEVEL_NORMAL؛
// كشف نوع الاسم
this.name = typeof name === STRING && name ?
// يمكن استرداد التبعيات كـ "كائن"، لذا استخدم مثيلًا بدلاً من ذلك.
this.dependeency = تبعيات مثيلات تبعيات المصفوفة: [];
};