مراجعة - مصنع الـ Logger
جزء من قسم Object Oriented Programming في رحلة Lua على Coddy — الدرس 66 من 70.
التحدي
سهللنقم ببناء نظام تسجيل (logging) باستخدام نمط المصنع (Factory pattern)! ستقوم بإنشاء أنواع مختلفة من المسجلات التي تشترك في واجهة برمجية موحدة، ثم تستخدم دالة مصنع لإنتاج المسجل المناسب بناءً على وسيط نصي بسيط.
ستقوم بتنظيم الكود الخاص بك عبر أربعة ملفات:
ConsoleLogger.lua: أنشئ فئة ConsoleLogger مع منشئ:new()وطريقة:log(message). عندما يتم استدعاء:log()، يجب أن تطبع الرسالة مع بادئة[CONSOLE]، مثل[CONSOLE] Your message here.FileLogger.lua: أنشئ فئة FileLogger بنفس الهيكل — منشئ:new()وطريقة:log(message). يجب أن يطبع هذا المسجل الرسائل مع بادئة[FILE]بدلاً من ذلك.LoggerFactory.lua: هذا هو المكان الذي يجتمع فيه نمط المصنع! أنشئ دالةcreateLogger(loggerType)تقبل وسيطاً نصياً. إذا كان النوع هو"console"، فقم بإرجاع ConsoleLogger جديد. وإذا كان النوع هو"file"، فقم بإرجاع FileLogger جديد. يتولى المصنع كافة تفاصيل تحديد الفئة التي سيتم إنشاؤها.main.lua: اطلب وحدة LoggerFactory الخاصة بك. اقرأ مدخلين: نوع المسجل والرسالة المراد تسجيلها. استخدم المصنع الخاص بك لإنشاء المسجل المناسب، ثم استدعِ طريقة:log()الخاصة به مع الرسالة.
تكمن أناقة هذا التصميم في أن الكود الرئيسي الخاص بك يتفاعل فقط مع المصنع — ولا يحتاج إلى معرفة ConsoleLogger أو FileLogger بشكل مباشر. كلا المسجلين ينفذان نفس واجهة :log()، لذا يمكن استخدامهما بالتبادل.
ستتلقى مدخلين:
- نوع المسجل (إما
"console"أو"file") - الرسالة المراد تسجيلها
على سبيل المثال، إذا كانت المدخلات هي console و Application started، فيجب أن تكون النتيجة:
[CONSOLE] Application startedإذا كانت المدخلات هي file و Saving user data...، فيجب أن تكون النتيجة:
[FILE] Saving user data...جرّب بنفسك
-- main.lua
-- نقطة الدخول الرئيسية لنظام التسجيل
local LoggerFactory = require('LoggerFactory')
-- قراءة المدخلات
local loggerType = io.read()
local message = io.read()
-- TODO: استخدم LoggerFactory لإنشاء المسجل المناسب
-- ثم استدعِ الدالة :log() مع الرسالة
جميع دروس Object Oriented Programming
4مشروع: بنك رقمي
إعداد المشروعطريقة الإيداع7تعدد الأشكال وإعادة التعريف
إعادة تعريف الدوالاستدعاء دوال الفئة الأبDuck Typingواجهة مشتركةالتحقق من النوعمراجعة - أدوار الموظفين2نمط النموذج الأولي للفئات
مفهوم النموذج الأوليالربط باستخدام __indexالمنشئ :new()تهيئة الخصائصنسخ مستقلةملخص - مصنع السيارات5تحميل المعاملات في OOP
جمع الكائناتطرح الكائناتدمج الكائناتمقارنة الكائنات (<, >)مراجعة - رياضيات المحفظة8التغليف
اصطلاحات التسميةاستخدام Closures للخصوصيةالوصول عبر Closuresجداول للقراءة فقطمنطق التحقق من الصحةمراجعة - الخزنة الآمنة11أنماط التصميم (مبسط)
دوال المصنعجدول Singletonنمط الـ Iteratorالمراقب (المستمع)مراجعة - مصنع الـ Logger3حالة الكائن وسلوكه
متغيرات النسخةدالات الجلب (Getter Methods)دالات التعيين (Setter Methods)الخصائص المحسوبةتنسيق النصوصالتحقق من المساواةمراجعة - درجة الطالب6أساسيات الوراثة
إعداد الوراثةوراثة الـ Methodsتوسيع الـ Constructorإضافة Methods للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكال