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

في هندسة البرمجيات، **نمط التسجيل النشط** (Active record) هو نمط معماري موجود في البرامج التي تخزن بيانات الكائن في الذاكرة في قواعد البيانات العلائقية. تم تسميته من قبل مارتن فاولر في كتابه 2003 *أنماط هندسة تطبيقات المؤسسة (Enterprise Application Architecture)* . قد تتضمن واجهة الكائن المطابق لهذا النمط وظائف (methods) مثل الإضافة والتحديث والحذف، بالإضافة إلى الخصائص ( properties ) التي تتوافق بشكل أو بآخر مع الأعمدة في جدول قاعدة البيانات الأساسي.

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

يكثر استخدام هذا النمط بواسطة أدوات ثبات الكائن (Persistence framework) وفي رسم الخرائط العلائقية للكائن (ORM). عادةً، سيتم الكشف عن علاقات المفاتيح الخارجية كمثيل كائن من النوع المناسب عبر خاصية.

## Implementations
يمكن العثور على هذا النمط في أطر عمل مختلفة للعديد من بيئات البرمجة. على سبيل المثال، إذا كان هناك جدول `parts` في قاعدة بيانات مع الأعمدة `name` (نوع السلسلة- string type) و `price` (نوع الرقم- number type)، ونمط سجل نشط ( Active record ) يتم تنفيذه في الطبقة `Part` ، الزائفة رمز
```php
part = new Part() //انشاء كائن جديد
part.name = "Sample part" //  اضافه قيمه الي قيمة الاسم
part.price = 123.45 // اضافه فيمة الي السعر
part.save() // حفظ الكائن مع اضافه خاصيه الاسم والسعر
```
سيُنشئ صفًا جديدًا في جدول `parts` بالقيم المحددة، وهو مكافئ تقريبًا لأمر SQL
```sql
INSERT INTO parts (name, price) VALUES ('Sample part', 123.45);
```
على العكس من ذلك، يمكن استخدام الفئة للاستعلام عن قاعدة البيانات:
```php
$b = Part.find_first("name", "gearbox")
```


سيجد هذا كائن `Part` جديدًا استنادًا إلى أول صف مطابق من جدول `parts` الذي يحتوي عمود `name` على قيمة "gearbox". قد يكون أمر SQL المستخدم مشابهًا لما يلي، اعتمادًا على تفاصيل تنفيذ SQL لقاعدة البيانات:


```sql
SELECT * FROM parts WHERE name = 'gearbox' LIMIT 1; -- MySQL or PostgreSQL
```
مثال اخر 
```php
$customer = new Customer();
$customer->name = 'Qiang';
$customer->save();
```


## نقد

### قابلية الاختبار
بسبب اقتران تفاعل قاعدة البيانات ومنطق التطبيق عند استخدام نمط السجل النشط، يصبح اختبار الوحدة (اختبار الوحدة) لكائن سجل نشط بدون قاعدة بيانات أمرًا صعبًا. يمكن التقليل من التأثيرات السلبية على قابلية الاختبار في نمط السجل النشط باستخدام أطر عمل محاكاة mocking أو (dependency injection ) التبعية لاستبدال طبقة البيانات الحقيقية بطبقة محاكاة.

### مبدأ المسؤولية الواحدة وفصل الاهتمامات (SRP)
نقد آخر لنمط السجل النشط هو أنه، أيضًا بسبب الاقتران القوي لتفاعل قاعدة البيانات ومنطق التطبيق، لا يتبع كائن السجل النشط مبدأ المسؤولية الفردية وفصل الاهتمامات على عكس البنية متعددة المستويات التي تتناول هذه الممارسات بشكل صحيح.   لهذا السبب، يكون نمط التسجيل النشط هو الأفضل ويتم استخدامه غالبًا في التطبيقات البسيطة التي تكون جميعها عبارة عن نماذج فوق البيانات مع وظيفة CRUD ، أو كجزء واحد فقط من بنية.  عادةً ما يكون هذا الجزء هو الوصول إلى البيانات وسبب تنفيذ العديد من ORMs نمط السجل النشط.

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

## انظر أيضا

* Business object
* عمليات إدارة البيانات (CRUD)
* نمط مخطط البيانات (Data mapper)
* رسم الخرائط العلائقية للكائنات (orm)

## المراجع

تصنيف:نماذج تصميم البرمجيات