Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - مصنع الـ Logger

جزء من قسم Object Oriented Programming في رحلة Lua على Coddy — الدرس 66 من 70.

challenge icon

التحدي

سهل

لنقم ببناء نظام تسجيل (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()، لذا يمكن استخدامهما بالتبادل.

ستتلقى مدخلين:

  1. نوع المسجل (إما "console" أو "file")
  2. الرسالة المراد تسجيلها

على سبيل المثال، إذا كانت المدخلات هي 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