[!NOTE] مشروع أرشيفي: Modella هو إطار عمل نماذج تاريخي لبيئة Node.js والمتصفحات. للمشاريع الحديثة، يُوصى باستخدام أدوات مثل Zod أو Prisma.
Modella هي مكتبة مدمجة للغاية لنمذجة البيانات مصممة لتكون قابلة للتوسيع بسهولة عبر الإضافات (Plugins).
تعريف النموذج (Model Definition)
const Modella = require('modella');
const validators = require('modella-validators');
const User = Modella('User')
.attr('id')
.attr('name')
.attr('email', { required: true })
.use(validators);
// قاعدة تحقق مخصصة
User.validate((user) => {
if (!user.name()) {
user.error('name', 'Name is required');
}
});
النسخ والخصائص (Instances & Properties)
// إنشاء النسخة (Instantiation)
const user = new User({ name: 'Alice', email: '[email protected]' });
// دوال القراءة والتعيين (Getters & Setters)
user.name(); // -> "Alice"
user.name('Bob'); // Sets name to "Bob"
user.set({ name: 'Charlie' });
// دوال الحالة والتحقق
user.has('name'); // -> true
user.isNew(); // -> true (not yet saved)
user.isValid(); // Runs sync validators -> true/false
أحداث دورة الحياة (Lifecycle Events)
// أحداث الحفظ والإنشاء والإزالة
user.on('save', () => console.log('Saved'));
user.on('create', () => console.log('Created'));
user.on('remove', () => console.log('Removed'));
// خطافات غير متزامنة (Async hooks)
user.on('saving', (instance, done) => {
done();
});
// أحداث تغيير الخصائص
user.on('change', () => console.log('Attributes modified'));
user.on('change email', () => console.log('Email changed'));
بنية الإضافات (Plugin Architecture)
إضافة Modella هي دالة عالية الرتبة (Higher-order function) تقوم بتوسيع النموذج:
const TimestampsPlugin = () => {
return (Model) => {
Model
.attr('createdAt')
.attr('updatedAt');
Model.on('saving', (record, done) => {
const now = new Date();
if (record.isNew()) record.createdAt(now);
record.updatedAt(now);
done();
});
return Model;
};
};
User.use(TimestampsPlugin());