نمط التسجيل النشط

من ويكيبيديا، الموسوعة الحرة

في هندسة البرمجيات، نمط التسجيل النشط (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)[عدل]

تعمل الأنماط المستندة إلى السجلات بشكل سيئ في الأنظمة الموزعة خاصةً عندما يكون التزامن مستحيلاً (على سبيل المثال دون اتصال). على سبيل المثال، قد يحتوي كلا التحديثين على حقل واحد صحيح ولكن يمكن للفوز واحد فقط من السجلين. 

انظر أيضا[عدل]

المراجع[عدل]

  1. ^ Fowler، Martin (2003). Patterns of enterprise application architecture. Addison-Wesley. ISBN:978-0-321-12742-6. مؤرشف من الأصل في 2019-12-05.
  2. ^ "Working with Databases: Active Record". Yii Framework (بالإنجليزية). Archived from the original on 2020-10-19. Retrieved 2020-10-19.