نمط التسجيل النشط
في هندسة البرمجيات، نمط التسجيل النشط (Active record) هو نمط معماري موجود في البرامج التي تخزن بيانات الكائن في الذاكرة في قواعد البيانات العلائقية. تم تسميته من قبل مارتن فاولر في كتابه 2003 أنماط هندسة تطبيقات المؤسسة (Enterprise Application Architecture) .[1] قد تتضمن واجهة الكائن المطابق لهذا النمط وظائف (methods) مثل الإضافة والتحديث والحذف، بالإضافة إلى الخصائص ( properties ) التي تتوافق بشكل أو بآخر مع الأعمدة في جدول قاعدة البيانات الأساسي.
نمط السجل النشط يوفر طريقة للوصول إلى البيانات في قاعدة البيانات. يتم التفاف جدول قاعدة البيانات أو طريقة العرض في فئة. وبالتالي، يتم ربط مثيل الكائن (instance) بصف واحد في الجدول. بعد إنشاء كائن، يتم إضافة صف جديد إلى الجدول عند الحفظ. أي كائن يتم تحميله يحصل على معلوماته من قاعدة البيانات. عند تحديث كائن، يتم أيضًا تحديث الصف المقابل في الجدول. وتنفذ فئة مجمع استرجاع أساليب أو خصائص كل عمود في الجدول أو طريقة العرض.
يكثر استخدام هذا النمط بواسطة أدوات ثبات الكائن (Persistence framework) وفي رسم الخرائط العلائقية للكائن (ORM). عادةً، سيتم الكشف عن علاقات المفاتيح الخارجية كمثيل كائن من النوع المناسب عبر خاصية.
Implementations
عدل
يمكن العثور على هذا النمط في أطر عمل مختلفة للعديد من بيئات البرمجة. على سبيل المثال، إذا كان هناك جدول parts
في قاعدة بيانات مع الأعمدة name
(نوع السلسلة- string type) و price
(نوع الرقم- number type)، ونمط سجل نشط ( Active record ) يتم تنفيذه في الطبقة Part
، الزائفة رمز
part = new Part() //انشاء كائن جديد
part.name = "Sample part" // اضافه قيمه الي قيمة الاسم
part.price = 123.45 // اضافه فيمة الي السعر
part.save() // حفظ الكائن مع اضافه خاصيه الاسم والسعر
سيُنشئ صفًا جديدًا في جدول parts
بالقيم المحددة، وهو مكافئ تقريبًا لأمر SQL
INSERT INTO parts (name, price) VALUES ('Sample part', 123.45);
على العكس من ذلك، يمكن استخدام الفئة للاستعلام عن قاعدة البيانات:
$b = Part.find_first("name", "gearbox")
سيجد هذا كائن Part
جديدًا استنادًا إلى أول صف مطابق من جدول parts
الذي يحتوي عمود name
على قيمة "gearbox". قد يكون أمر SQL المستخدم مشابهًا لما يلي، اعتمادًا على تفاصيل تنفيذ SQL لقاعدة البيانات:
SELECT * FROM parts WHERE name = 'gearbox' LIMIT 1; -- MySQL or PostgreSQL
مثال اخر[2]
$customer = new Customer();
$customer->name = 'Qiang';
$customer->save();
نقد
عدلقابلية الاختبار
عدلبسبب اقتران تفاعل قاعدة البيانات ومنطق التطبيق عند استخدام نمط السجل النشط، يصبح اختبار الوحدة (اختبار الوحدة) لكائن سجل نشط بدون قاعدة بيانات أمرًا صعبًا.[بحاجة لمصدر] يمكن التقليل من التأثيرات السلبية على قابلية الاختبار في نمط السجل النشط باستخدام أطر عمل محاكاة mocking أو (dependency injection ) التبعية لاستبدال طبقة البيانات الحقيقية بطبقة محاكاة.[بحاجة لمصدر]
مبدأ المسؤولية الواحدة وفصل الاهتمامات (SRP)
عدلنقد آخر لنمط السجل النشط هو أنه، أيضًا بسبب الاقتران القوي لتفاعل قاعدة البيانات ومنطق التطبيق، لا يتبع كائن السجل النشط مبدأ المسؤولية الفردية وفصل الاهتمامات على عكس البنية متعددة المستويات التي تتناول هذه الممارسات بشكل صحيح. لهذا السبب، يكون نمط التسجيل النشط هو الأفضل ويتم استخدامه غالبًا في التطبيقات البسيطة التي تكون جميعها عبارة عن نماذج فوق البيانات مع وظيفة CRUD ، أو كجزء واحد فقط من بنية. عادةً ما يكون هذا الجزء هو الوصول إلى البيانات وسبب تنفيذ العديد من ORMs نمط السجل النشط.
الانظمة الموزعة (Distributed systems)
عدلتعمل الأنماط المستندة إلى السجلات بشكل سيئ في الأنظمة الموزعة خاصةً عندما يكون التزامن مستحيلاً (على سبيل المثال دون اتصال). على سبيل المثال، قد يحتوي كلا التحديثين على حقل واحد صحيح ولكن يمكن للفوز واحد فقط من السجلين.
انظر أيضا
عدل- Business object
- عمليات إدارة البيانات (CRUD)
- نمط مخطط البيانات (Data mapper)
- رسم الخرائط العلائقية للكائنات (orm)
المراجع
عدل- ^ Fowler، Martin (2003). Patterns of enterprise application architecture. Addison-Wesley. ISBN:978-0-321-12742-6. مؤرشف من الأصل في 2019-12-05.
- ^ "Working with Databases: Active Record". Yii Framework (بالإنجليزية). Archived from the original on 2020-10-19. Retrieved 2020-10-19.